要知道任何数据类型都是根据需求逐渐发展的,目前Redis支持的数据类型有5种:
string、hash、list、set、sorted_set
而且在Redis中数据都是以key-value的形式存储的,key规定只能是string类型的,所以我们所讨论的数据量类型默认是对value来说的。
1、string类型
基本操作
存储内容:字符串,json数据,或者数字。
当存储数据时,它可以进行加减运算,但是它仍然是个字符串。
#对于数据的操作,最基本的就是三个方面:存、取、删除。
set key value #存
mset key value [key value ...] #一次存多个
get key #取
mget key [key ...] #一次取多个
del key [key ...] #删除、可以同时删除多个
strlen key #获取字符串长度
append key value #追加字符(若字符串不存在,则相当于新建追加的字符)
扩展操作
1、实现数值增减:
incr key #自增1
incrby key increment #自增指定的值(increment)
incrbyfloat key increment #自增指定的小数值(increment)
decr key #自减1
decrby key decrement #自减指定的值(increment)
2、设置具有时效性的数据:
setex key seconds value #数据有效期为seconds秒
psetex key milliseconds value #数据有效期为milliseconds秒
2、hash类型
Hash类型就像在Redis里面划分出来一个小Redis结构一样。
注意hash中的value值只能存放string类型。(没有嵌套)
基本操作
hset key field value #添加单个数据
hmset key field value [field value ...] #添加多个数据
hget key field #获取单个数据
hmget key field [field ...] #获取多个数据
hgetall key #获取全部数据
hdel key field [field ...] #删除数据
hlen key #返回Hash存放数据数量
hexists key field #判断指定field是否存在
扩展操作
hkeys key #获取指定hash的所有field
hvals key #获取指定hash的所有value
hincrby key field increment #增加指定整型(increment)数值
hincrbyfloat key field increment #增加指定浮点型(increment)数值
3、list类型
底层用双向链表实现。(实现类似下面的双向管道)
基本操作
对于list的命令,一定要注意考虑数据进出位置和顺序。
lpush key value [value ...] #左侧压入数据
rpush key value [value ...] #右侧压入数据
lrange key start stop #查询指定下标范围(0,-1是全部数据)的数据
lindex key index #查询指定下标的数据
llen key #查询共有多少数据
lpop key #左侧弹出数据
rpop key #右侧弹出数据
扩展操作
blpop key [key ...] timeout #在规定时间timeout内左侧弹出数据,若无法完成阻塞至时间耗尽
brpop key [key ...] timeout #在规定时间timeout内右侧弹出数据,若无法完成阻塞至时间耗尽
lrem key count value #删除list中指定数量(从左侧开始数)的指定元素。
假设mylsit不存在,现在执行左侧弹出规定10秒内执行。
可以看到,经过10.02s获取到空值(nil代表空值)。前10s都处于阻塞状态。
lrem指令演示:
4、set类型
set底层是通过hash来实现的,只不过为了更高的查询效率,它采用key存放数据,value为空。
set中的数据用member来表示。
基本命令
sadd key member [member ...] #新增数据
smembers key #查询所有数据
srem key member [member ...] #删除指定数据
扩展命令
srandmember key [count] #随机获取一个或者count个数据
spop key [count] #随机获取并且移除一个或者count个数据
set作为集合,根据其需求提供逻辑运算。
sinter key [key ...] #求交集
sunion key [key ...] #求并集
sdiff key [key ...] #求差集,注意前后顺序。
sinterstore destination key [key ...] #求交集,并将结果存放在destination(指定集合)中。
sunionstore destination key [key ...] #求并集,并将结果存放在destination(指定集合)中。
sdiffstore destination key [key ...] #求差集,并将结果存放在destination(指定集合)中。
smove source destination member #将指定数据从source集合移动到destination集合中
5、sorted_set类型
sorted_set(有序集合)是在set的基础上加上一个字段score,根据score的值实现排序的。
基础操作
zadd key score member [score member ...] #添加数据
zrange key start stop [WITHSCORES] #查询数据(默认升序排列)
zrangebyscore key min max [WITHSCORES] [LIMIT offset count] #按score大小进行范围查询
zrevrange key start stop [WITHSCORES] #反转查询(降序排列)
zcard key #获取集合的数据数量
zcount key min max #根据score的值,获取指定范围的数据数量
zrem key member [member ...] #移除数据
zremrangebyrank key start stop #范围移除
zremrangebyscore key min max #根据score的值进行范围移除
zinterstore destination numkeys key [key ...] #求交集并存储到destination中
zunionstore destination numkeys key [key ...] #求并集并存储到destination中
扩展操作
zrank key member #获取(升序)排序索引
zrevrank key member #获取(降序)排序索引
zscore key member #获取指定数据的score
zincrby key increment member #修改指定member的score,increment为正则增加,为负则减。