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}

猜你喜欢

转载自blog.csdn.net/lglglglglgui/article/details/108710853