列表 list
命令 | 说明 |
---|---|
lpush key value [value …] | 将一个或多个值value插入到key列表的表头(最左边) |
rpush key value [value …] | 将一个或多个值value插入到key列表的表尾(最右边) |
lpop key | 移除并返回key列表的头元素 |
rpop key | 移除并返回key列表的尾元素 |
lrange key start stop | 返回列表key中指定区间内的元素,区间以偏移量start和stop指定 |
blpop key [key …] timeout | 从key列表表头弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待 |
brpop key [key …] timeout | 从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待 |
lindex key index | 获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。 |
llen key | 获取列表 key 的长度 |
lset key index value | 将列表 key 下标为 index 的元素的值设置为 value |
lrem key count value | 根据参数 count 的值,移除列表中与参数 value 相等的元素 |
应用场景:
- 常用数据结构
Stack(栈) = lpush + lpop
Queue(队列)= lpush + rpop
Blocking MQ(阻塞队列)= lpush + brpop //右边取数据如果没有将会阻塞 - 微博消息和微信公号消息
张三关注了范冰冰,林志玲等微博.
- 范冰冰发表最新微博动态,消息为:helloworld 。系统需要把这条最新动态推送给张三
lpush msg:{张三id} “helloworld” //每个用户都有一个自己的消息通道
2)林志玲发表微博,消息为: 666
lpush msg:{张三id} 666
3)张三查看最新微博消息
lrange msg:{张三id} 0 5 //前5条最新消息
集合类型 set
set常用操作
命令 | 说明 |
---|---|
sadd key member [member …] | 往集合key中存入元素,元素存在则忽略,若key不存在则新建 |
srem key member [member …] | 从集合key中删除元素 |
smembers key | 获取集合key中所有元素 |
scard key | 获取集合key的元素个数 |
sismember key member | 判断member元素是否存在于集合key中 |
srandmember key [count] | 随机从集合key中选出count个元素,元素不从key中删除 |
spop key [count] | 随机从集合key中选出count个元素,元素从key中删除 |
Set运算操作
命令 | 说明 |
---|---|
sinter key [key …] | 交集运算 |
sinterstore destination key [key …] | 将交集结果存入新集合destination中 |
sunion key [key …] | 并集运算 |
sunionstore destination key [key …] | 将并集结果存入新集合destination中 |
sdiff key [key …] | 差集运算 |
sdiffstore destination key [key …] | 将差集结果存入新集合destination中 |
sinter set1 set2 set3 = { c } //交集
sunion set1 set2 set3 = { a,b,c,d,e } //并集
sdiff set1 set2 set3 = { a } //差集 set1集合中其他集合所没有的元素
应用场景:
-
抽奖功能
1)点击参与抽奖加入集合
sadd key {userlD}
2)查看参与抽奖所有用户
smembers key
3)随机抽取count名中奖者
srandmember key [count] / SPOP key [count] -
微信微博点赞,收藏,标签
1)点赞
sadd like:{消息ID} {用户ID}
2) 取消点赞
srem like:{消息ID} {用户ID}
3) 检查用户是否点过赞
sismember like:{消息ID} {用户ID}
4)获取点赞的用户列表
smembers like:{消息ID}
5)获取点赞用户数
scard like:{消息ID} -
集合操作实现微博微信关注模型
- 张三关注的人:
张三Set-> {李四, 王五, 赵六} - 李四关注的人:
李四Set–> {张三, 王五, 赵六,孙七} - 王五关注的人:
王五Set-> {张三, 李四, 赵六, 孙七, 周八) - 张三与李四共同关注的人
sinter zhangsanSet lisiSet–> {王五, 赵六}、 - 张三关注的人也关注李四
//遍历张三的关注,然后一个个看李四是否存在其集合中
sismember wangwu lisi
sismember zhaoliu lisi
6) 张三可能认识的人
//遍历张三的关注,再与张三集合做差集
sdiff lisiSet zhansanSet->(zhangsan, sunqi}
sdiff wangwuSet zhangsanSet ->(zhangsan,sunqi,zhouba)
sdiff zhaoliuSet zhangsanSet ->()
- 集合操作实现电商商品筛选
//华为集合
sadd brand:huawei P30
//小米集合
sadd brand:xiaomi mi-6X
//iphone集合
sadd brand:iPhone iphone8
//安卓集合
sadd os:android P30 mi-6X
//cpu型号集合
sadd cpu:brand:intel P30 mi-6X
//内存为8G的集合
sadd ram:8G P30 mi-6X iphone8
//需要一个操作系统为安卓,cpu为inter,内存为8G的手机
sinter os:android cpu:brand:intel ram:8G -> {P30,mi-6X}