redis妙用-set类型
条评论set类型,在redis中是非常强大的存在,但是我们一般不会想到用它。所以我最想分享的也就是set类型,想让大家对set引起重视。因为在互联网中其实也有很多set的身影,只是我们不难么容易联想到而已。比如
- 抽奖活动
- 点赞、签到
- 好友关注模型
- 电商商品筛选
- 大数据量对账
api
基本操作
| 命令 | 说明 |
|---|---|
| SADD key member[member…] | 存储元素 |
| SREM key member[member…] | 从集合中删除元素 |
| SMEMBERS key | 获取集合中所有元素 |
| SCARD key | 获取集合的元素个数 |
| SISMEMBER key member | 判断{member}是否存在集合中 |
| SRANDMEMBER key [count] | 从集合中随机选出{count}个元素,不删除 |
| SPOP key [count] | 从集合中随机选出{count}个元素,删除 |
集合运算操作
| 命令 | 说明 |
|---|---|
| SINTER key [key…] | 交集运算 |
| SUNION key [key…] | 并集运算 |
| SDIFF key [key…] | 差集运算 |
| SINTERSTORE {resultKey} key [key…] | 交集运算,保存到resultKey中 |
| SUNIONSTORE {resultKey} key [key…] | 并集运算,保存到resultKey中 |
| SDIFFSTORE {resultKey} key [key…] | 差集运算,保存到resultKey中 |
应用场景
抽奖活动
1 |
|
点赞、签到

1 | SADD like::{articleId} {userId} |
好友关注模型

1 | far关注的人:farsub -> {"jayden", "james", "mic"} |
电商商品筛选

在每个商品入库的时候,给没有商品建立它的静态标签,如品牌、尺寸、处理器、内存…。如下
1 | SADD brand::lenovo 拯救者y7000 Thinkpad-T480 |
那么你在筛选查询的时候,将各个标签放在一起求交集就得到对应的结果,如下
1 | SINTER brand::lenovo screenSize::15.6 cpu::i7 memory::8G -> 拯救者y7000 |
订单对账的功能
场景是这样的,与第三方公司交互时,不能实时对账。第三方公司只能在第二天将前一天的所有订单都传过来,然后要跟我们自己这边的订单对账。
当你的数据量比较庞大时,一天几十万单的时候,你循环一个个遍历我们的订单是否存在对方的订单中,这样的操作肯定是不合适的。
使用redis解决方案。将我们要关注的字段值,比如订单号、金额组成一个值存入redis的set类型中,形成两个set集合,然后取差值。如下
- 本文链接:https://www.ofcoder.com/2019/05/17/middleware/redis%E5%A6%99%E7%94%A8-set%E7%B1%BB%E5%9E%8B/
- 版权声明:Copyright © 并发笔记 - ofcoder.com. Author by far.
分享