redis数据类型
字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)
redis五大常用数据类型
字符串类型(string)
string是redis最基本的类型,一个key对应一个value;可以包含任何数据,比如jpg图片或者序列化的对象 ;一个redis中字符串value最多可以是512M。
哈希(hash)
hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>。
列表(list)
list列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
无序不重复集合(set)
set是string类型的无序不重复集合。它是通过HashTable实现实现的。
有序不重复集合(zset)
zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,但是分数是可以重复的。
redis常见数据类型操作命令查询参考网址www.redis.cn/commands.ht…
redis 键(key) 命令
键(key)一些常用的命令
- 查看当前库所有key
keys * #age、name、hello是先使用set命令保存的string字符串的key
复制代码
- 判断某个key是否存在
exists age #key存在,返回1
exists kkkk #key不存在,返回0
复制代码
- 给key设置过期时间和查看过期时间
set e1 test #保存e1
expire e1 10 #设置e1过期时间10s
ttl e1 #查看e1剩余过期时间,当为-2时代表已过期, -1代表永不过期
复制代码
- 查看key类型
type key #返回key对应的数据类型
复制代码
redis 字符串(String) 命令
字符串(String)一些常用的命令
- 增加、查看、删除
set str01 s1 #设置str01的值为s1
get str01 #获取str01的值
del str01 #删除str01
复制代码
- 追加、查看长度
append str02 333 #从字符串尾部追加字符串
strlen str02 #查看字符串长度
复制代码
- 数字字符串加、减
set num 1 #保存key为num,value为1
incr num #累加1
decr num #减1
incrby num 3 #加3,数字代表要加多少
decrby num 2 #减2 数字代表要减多少
复制代码
- 根据下标区间显示字符、替换字符
getrange str03 0 -1 #起始下标从0开始,结尾下标为-1时查看所有字符
getrange str03 0 2 #查看起始下标从0到2的字符
setrange str03 1 333 #替换从下标为1开始的后面的字符串,333为替换的字符串
复制代码
- 特殊命令
setex str04 30 abc #设置key有效期,并设置vaule值,30秒为过期时间
复制代码
setnx str03 abc #不存在的key可以创建成功,如果存在则创建不成功
setnx str05 aaa #不存在创建成功
复制代码
- 多key操作命令
mset str06 v06 str07 v07 str08 v08 #可以同时为多个key-vlue赋值
mget str06 str08 #可以查询多个key对应的value
复制代码
msetnx str06 v066 str09 v09 str10 v10 #所有key中不存在才创建成功,否则创建失败。str06存在,所以都不创建成功。
复制代码
getset str06 v066 #存在的key的value值会被覆盖(先get再set,先获取原先key的value值)
getset str11 v11 #不存在的key直接创建
复制代码
redis 列表(List) 命令
列表(list)一些常用的命令
- 左边进、右边进、查看列表
lpush list01 a b c d #左边进,先进的往后挪
复制代码
rpush list02 a b c d #右边进,先进的排前面
复制代码
- 左边弹出、右边弹出
lpop list01 #从左边第一位弹出
复制代码
rpop list02 #从右边第一位弹出
复制代码
- 根据下标获取字符
lindex list01 1 #根据下标1获取对应的字符
复制代码
- 查询list列表长度
llen list01
复制代码
- 删除指定个数的字符
lrem list03 2 a #删除2个为a的字符
复制代码
- 截取字段从新复制
ltrim list01 1 3 #从下标为1到3截取的字符串,重新复制给key
复制代码
- 右边弹出的值赋值给新的key
rpoplpush list01 list01 #从右边弹出,左边加入。
rpoplpush list01 list02 #不存在list会新创建,并把右边弹出的值加到新的list中
复制代码
- 根据下标替换字符
lset list01 1 java #下标为1的字符替换成java
复制代码
- 在某个字符前或者后插入字符
linsert list01 before java c++ #在java前面插入c++
linsert list01 after java go #在java后面插入go
复制代码
redis 集合(Set) 命令
集合(set)一些常用的命令
- 添加、查看、判断是否存在
sadd s01 a a b c c d e f f #添加set无序不重复集合
smembers s01 #查看set集合元素
复制代码
sismember s01 h #不存在返回0
sismember s01 a #存在返回1
复制代码
- 查看集合的长度
scard s01 #查看集合的长度
复制代码
- 删除集合中的元素
srem s01 d #删除单个d
srem s01 c a #删除字符c和a
复制代码
- 随机返回集合中的某个元素
srandmember s01 #随机返回集合中的某个元素(并不是删除集合的元素)
复制代码
- 随机弹出集合里一个或者多个元素
spop s01 1 #随机弹出集合里1个元素,将不在集合里
spop s01 3 #随机弹出集合里3个元素,将不在集合里
复制代码
- 将集合的某一个元素赋值到新的另一个集合中
smove s01 s02 f #将集合s01中f,赋值给集合s02
复制代码
- 集合差集、交集、并集
sdiff s01 s02 #集合s01和集合s02的差集,取值为s01与s02不同的值 1 2 3
sdiff s02 s01 #集合s02和集合s01的差集,取值为s02与s01不同的值 6 7 8
复制代码
sinter s01 s02 #集合s01和集合s02的交集相同 4 5
复制代码
snuion s01 s02 #集合s01和集合s02的并集,两个集合全部元素
复制代码
redis 哈希(Hash) 命令
哈希(hash)一些常用的命令
- 创建、查询
hset h01 k1 v1 k2 v2 #创建hash散列
hget h01 k1 #查询h01 k1的value
复制代码
- 创建多个、查询多个
hmset h02 k1 v1 k2 v2 k3 v3
hmget h02 k1 k2 k3
复制代码
- 查询hash散列的所有的key-value
hgetall h02
复制代码
- 删除hash散列中的某个key-value
hdel h02 k2 #删除散列h02中k2
复制代码
- hash散列中是否存在某个key
hexists h02 k2 #不存在返回0
hexists h02 k3 #存在返回1
复制代码
- 查看hash散列中key个数
hlen h02 #查看h02中key个数
复制代码
- 查看hash散列的所有key、value
hkeys h02 #查看h02中的所有key
hvals h02 #查看h02中的所有value
复制代码
- hash散列中数字的加上某个数
hincrby h02 k1 1 #非数字的加法会报错
hincrby h03 k1 1 #k1的值加1
复制代码
hincrbyfloat h03 k1 2.5 #k1加上2.5小数
复制代码
- 不存在才创建
hsetnx h03 k1 2 #hash散列存在时无效
hsetnx h04 k1 2 #不存在创建
复制代码
Redis 有序集合(sorted set) 命令
有序集合(zset)一些常用的命令
- 添加、查看
zadd z01 100 v1 200 v2 300 v3 #添加
zrange z01 0 -1 #查看zset集合所有元素,不包括分数
zrange z01 0 -1 withscores #查看zset集合所有元素,包括分数
复制代码
- 查询分数在某个区间
zrangebyscore z02 70 90 #查询分数在70到90之间的元素
zrangebyscore z02 70 90 withscores #查询分数在70到90之间,并显示分数
复制代码
zrangebyscore z02 (60 90 #查询分数大于60,小于等于90之间的元素
zrangebyscore z02 60 (90 #查询分数大于等于60,小于90之间的元素
复制代码
zrangebyscore z02 70 +inf withscores #大于等于70以上的分数的元素
复制代码
zrangebyscore z02 70 +inf withscores limit 0 2 #limit截取下标0 到 2 的元素
复制代码
- 删除一个或者多个元素
zrem z02 v1 #删除v1
zrem z02 v2 v3 #删除v2、v3
复制代码
- 获取集合中的元素个数
zcard z03
复制代码
- 获取在分数区间的个数
zcount z03 300 500 #在300到500之间的个数
复制代码
- 获取value下标位置
zrank z03 v5 #获取v5所在的下标
复制代码
- 查看某个元素的分数
zscore z03 v3 #查看v3的分数
复制代码
- 获取元素的逆序下标
zrevrank z03 v1 #获取v1逆序的下标
复制代码
- 查看zset集合倒序排序
zrevrange z03 0 -1 #集合z03倒序排序
复制代码
- 分数区间倒序查找
zrevrangebyscore z03 300 500 withscores #查询为空,需要分数倒着查
zrevrangebyscore z03 500 300 withscores #查询分数300到500之间的元素倒序
复制代码
小结
上面就是redis五大常用类型的一些基本操作命令,也只是一个简单的入门过程。后续还需要研究这五大类型的底层数据结构。另外还有三个扩展数据类型:bitmap、hyperloglgos、geo。