04.Redis数据类型操作命令与应用场景(下)

列表 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 //右边取数据如果没有将会阻塞
  • 微博消息和微信公号消息

张三关注了范冰冰,林志玲等微博.

  1. 范冰冰发表最新微博动态,消息为: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}

  • 集合操作实现微博微信关注模型

  1. 张三关注的人:
    张三Set-> {李四, 王五, 赵六}
  2. 李四关注的人:
    李四Set–> {张三, 王五, 赵六,孙七}
  3. 王五关注的人:
    王五Set-> {张三, 李四, 赵六, 孙七, 周八)
  4. 张三与李四共同关注的人
    sinter zhangsanSet lisiSet–> {王五, 赵六}、
  5. 张三关注的人也关注李四
    //遍历张三的关注,然后一个个看李四是否存在其集合中
    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}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值