list组命令
集合,有序,值可重复,可以实现栈、队列、数组、阻塞队列。
LPUSH / RPUSH / LPOP / RPOP
栈,同向命令,先进后出
LPUSH / LPOP 或 RPUSH / RPOP
队列,反向命令,先进先出
LPUSH / RPOP 或 RPUSH / LPOP
数组
LLEN / LRANGE / LINDEX / LSET / LINSERT / LREM
阻塞队列
BLPOP / BRPOP
如图,现在没有任何key,然后在其它窗口,用BLPOP获取列表,会阻塞,直到有值
其它命令
BRPOPLPUSH、LPUSHX、LTRIM、RPUSHX
hash组命令
增删改查
- 新增、修改
命令:HSET
描述:设置哈希属性值
命令:HSETNX
描述:设置哈希属性值,只有属性不存在才能设置成功
命令:HMSET
描述:设置一个哈希的多个属性值
- 查询
命令:HEXISTS
描述:确定一个哈希属性是否存在
命令:HGETALL
描述:查询一个哈希的所有属性名和属性值
命令:HKEYS
描述:获取一个哈希的所有属性名
命令:HLEN
描述:查询一个哈希的属性数量
命令:HVALS
描述:查询一个哈希所有属性值
命令:HGET
描述:查询哈希属性值
命令:HMGET
描述:查询一个哈希的多个属性值
命令:HSTRLEN
描述:查询哈希属性值的字符串长度
命令:HSCAN
描述:增量迭代哈希属性和相关值
- 删除
命令:HDEL
描述:删除一个或多个哈希属性值
- 数字类型哈希属性值计算
命令:HINCRBY
描述:数字类型的哈希属性值加上给定整数值
命令:HINCRBYFLOAT
描述:数字类型的哈希属性值加上给定小数值
set组命令
集合,去重,无序
增删查
- 新增
命令:SADD
- 查询
命令: SCARD
描述:查集合中元素的数量
命令:SISMEMBER
描述:查询元素是否在集合中
命令:SMEMBERS
描述:查询集合中所有元素
命令: SRANDMEMBER
描述:随机查询集合中的一个或多个元素
命令:SSCAN
描述:递增迭代集合元素
- 删除
命令:SPOP
描述:删除集合中一个或多个元素(指定数量),并返回被删除的元素
命令:SREM
描述:删除集合中一个或多个元素(指定元素值),并返回被删除的元素
交集、并集、差集、移动元素
-
交集
命令:SINTER
描述:集合间的交集,返回交集
命令:SINTERSTORE
描述:集合间的交集,把交集放到一个新的集合中,返回交集元素数量
-
并集
命令:SUNION
描述:集合间的并集,返回并集
命令:SUNIONSTORE
描述: 集合间的并集,返回并集,把并集放到一个新的集合中,返回并集元素数量
-
差集
命令:SDIFF
描述:集合间的差集,从左向右,依次取差集,返回差集
命令:SDIFFSTORE
描述:集合间的差集,从左向右,依次取差集,把差集放到一个新的集合中,返回差集元素数量
-
移动元素
命令:SMOVE
描述:移动元素,从左向右,把左侧集合中的某个元素,移动到右侧集合中
应用场景
- 抽奖场景1
主播准备了3个礼物,在所有粉丝中抽取3个幸运的粉丝,每人一件奖品
命令:SRANDMEMBER fans 3
描述:从fans集合中随机取出去重的3个元素
注意:count如果是正数,则取出去重的元素
- 抽奖场景2
主播准备了3个礼物,在所有粉丝中抽取幸运的粉丝,粉丝获奖数量不限制
命令:SRANDMEMBER fans -3
描述:从fans集合中随机取出可以重复的3个元素
注意:count如果是复数,则取出可以重复的元素
- 抽奖场景3
公司年终派发购物卡,10张购物卡派发给全部员工(只有3个员工)
命令:SRANDMEMBER employee -10
描述:员工集合employee中3个人随机分配10张购物卡,一定不能去重,否则每次都是3个员工没人1张卡了;不去重,则3个人随机分配10张卡。
注意:count如果是复数,则取出可以重复的元素
- 抽奖场景4
公司年会抽奖,一次只抽一张,获奖的员工不能再次参与抽奖
命令:SPOP employee 1
描述:员工集合employee中,每次随机抽取1个员工中奖,同时中奖员工从员工集合中去掉
注意:也可以一次抽取多人,把1改成其它数字即可
sorted_set组命令
增删改查
- 新增修改
命令:ZADD
描述:新增一个或多个元素,或者修改元素的分数。排序集合中如果没有这个元素,就新增;如果有,就修改分数。
命令:ZINCRBY
描述:排序集合元素增加分数
- 查询
命令:ZRANGE
描述:查询一个排序集合内,一个范围内的元素,索引范围,可以选择是否显示分数,索引从低到高
命令:ZREVRANGE
描述:查询一个排序集合内,一个范围内的元素,索引范围,可以选择是否显示分数,索引从高到低
命令:ZRANGEBYSCORE
描述:查询一个排序集合内,一个范围内的元素,分数范围,可以选择是否显示分数,分数从低到高
命令:ZREVRANGEBYSCORE
描述:查询一个排序集合内,一个范围内的元素,分数范围,可以选择是否显示分数,分数从高到低
命令:ZRANK
描述:确定排序集合中一个元素的索引,分数从低到高
命令:ZREVRANK
描述:确定排序集合中一个元素的索引,分数从高到低
命令:ZCARD
描述:查询一个排序集合中元素的数量
命令:ZCOUNT
描述:查询一个排序集合中元素的数量,在给定的分数范围内
命令:ZSCAN
描述:模糊查询
命令:ZSCORE
描述:查询一个排序集合中一个元素的分数
- 删除
命令:ZREM
描述:删除一个排序集合中的一个或多个元素
命令:ZREMRANGEBYRANK
描述:删除一个排序集合中的,给定“索引”范围内的所有元素
命令:ZREMRANGEBYSCORE
描述:删除一个排序集合中的,给定“分数”范围内的所有元素
交集、并集
准备两个有序集合k1、k2
- 交集
命令:ZINTERSTORE
描述:两个有序集合取交集,存入一个新的有序集合。可以指定权重、算法。
不带权重、算法,默认使用sum算法
加上权重,k1权重1,k2权重0.5,则相同元素的分数:k1 + 0.5 * k2
加上min/max算法
- 并集
命令:ZUNIONSTORE
描述:两个有序集合取并集,存入一个新的有序集合。可以指定权重、算法。
不带权重、算法,默认使用sum算法
加上权重,k1权重1,k2权重0.5,则相同元素的分数:k1 + 0.5 * k2
加上min/max算法
其它命令
ZRANGEBYLEX、ZREMRANGEBYLEX、ZREVRANGEBYLEX、ZLEXCOUNT
这些命令是依赖字典排序的,默认是以ASCII字符集的顺序进行排列,如果成员字符串包含utf-8这类字符集的内容,就会影响返回结果,所以建议不要使用。
skiplist
排序是怎么实现的,增删改查的速度为什么这么快?
答:使用skiplist跳跃表。
对比链表,从前往后依次查询,随着数据量增大,性能下降。
跳跃表,是多层的链表。一个元素可能出现在多层中。从高层往低层查,牺牲空间换性能。
插入后,随机造层,为后来的查询加速。
平衡树。
数据量少的时候,可能没有链表速度快,也可能量少的时候不用跳跃表。数量到一定程度再从链表换成跳跃表。跳跃表在数量不断增大的情况下,可以保持速度比较平衡稳定。而链表在数量不断增大时,速度会下降。
上一篇《05 Redis的String类型&bitmap》
下一篇《07 Redis消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU》