1. 36 氪发推送消息,消息id 1001
lpush msg:{zhangsan id} 1001
2. 汽车之家推送消息, 消息id 1002
lpush msg:{zhangsan id} 1002
3. 获取最新消息
lrange msg:{zhangsan id} 0 4
遇到的问题:如果大 V 关注的用户上几千万,那么我们就可以分批次发消息
- 先发在线的用户
- 再后台分批次发其他用户
4. set
Set 常用操作
sadd key member [member ...] // 往集合key 中存入数据,如果元素存在则忽略若key 不存在则新建 srem key member [member ...] // 从集合 key 中删除元素 smember key // 获取集合 Key 中所有元素 scard key // 获取集合 key 中的元素个数 simember key member // 判断 member 元素是否存在与集合 key 中 srangmembre key [count] // 从集合中选出 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 中
使用场景
1)微信抽奖功能
- 点击参与加入集合
sadd key {userId}
- 查看参与抽奖的所有用户
smembers key
- 抽取 count 名中间者
srandmember key [count] / spop key [count] srandmember 抽奖完成后,那么就没有这个用户了 spop 抽奖完成一个这个用户就没有了
2) 微信新浪微博点赞,收藏,标签
- 点赞
sadd like:{消息id} {用户id}
- 取消点赞
srem like:{消息id} {用户id}
- 检查用户是否点赞
sismember like:{消息id} {用户id}
- 获取点赞的用户列表
smembers like:{消息id}
- 获取点赞用户数
scard like:{消息id}
集合操作
sinter set1 set2 set3 -> {c} //交集 sumion set1 set2 set3 -> {a, b, c, d ,e} // 并集 sdiff set1 set2 set3 -> {a} // 差集, 第一个集合减去后面集合的并集
集合操作实现微博关注模型
- 张三关注的人
zhangsan -> {lisi , wangmazi}
- 李四关注的人
lisi -> {zhaoliu, wangmazi}
- 王麻子关注的人
wangmazi -> {lisi, zhangsan, wangwu}
- 张三和李四共同关注的人
sinter zhangsan lisi -> {wangmazi}
- 张三罐组的人也关注了李四
sismember zhangsan lisi sisimember wangmazi lisi
- 我可能认识的人
sdiff lisi zhangsan -> {zhaoliu}
集合操作实现电商商品筛选
sadd brand:huawei P40 sadd brand:xiaomi mi-11 sadd brand:iPhone iphone11 sadd os:android P40 mi-11 sadd cpu:brand:intel P40 mi-11 sadd ram:8G mi-11 iphone11 sinter os:andorid cpu:brand:intel ram:8G -> {P40, mi-11}
5. zset
zset 常用操作
zadd key score member [[score member] ... ] // 往有序集合 key 中加入代分值元素 zrem key member [member ... ] // 从有序集合 key 中删除元素 zscore key score // 返回有序集合 key 元素 member 的分值 zrange key start stop [withscores] // 正序获取有序集合 key 下标 start 下标到 stop 下标的元素 zrevrages key start stop [withscores] // 倒序获取有序集合 key 从 start 下标到 stop 下标的元素 zset 集合操作 zunionstore destkey numkeys key [key ...] // 并集计算 zunionstore destkey numkeys key [key ...] // 并集计算
热搜推荐
- 点击新闻
zincrby hotnews:20210120 1 中国航天2021开门红
- 展示当日排行前 10
zrevrange hotnews:20210120 0 9 withscores
- 七日搜索榜单计算
zunionstore hotnews:20210114 - hotnews:20210120 10
- 展示七日排行前十
zrevrange hotnews:20210114 - hotnews:20210120 0 9 withscores