Redis入门到精通(五)——Set类型数据的基本操作、Set类型数据的扩展操作(随机操作数据、交并集操作)、Set类型数据操作的注意事项、Set类型应用场景(进行去重)

set类型结构

list类型也能存储很多数据,为什么还要有set类型呢?因为list是基于双向链表的底层结构,查询时候比较慢。

类似于hash类型,但是没有hash中的value,hash中的field当成set的value

一、set类型数据的基本操作

添加数据   sadd key member1  member2 ...
获取全部数据    smembers key
删除数据    srem key member1   member2 ...
获取集合数据总量 scard key
判断集合中是否包含指定数据 sismember key member #如果存在返回1,不存在返回0

二、set类型数据的扩展操作

1.业务场景:使用set随机操作数据

Redis应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,应用推荐等等

 

随机获取集合中指定数量的数据       srandmember key count           #count指获取数据的个数
随机获取集合中的某个数据并将该数据移除集合   spop key 

 

 

2.业务场景:set数据交并差操作

Redis应用于同类信息的关联搜索,二度关联搜索,深度关联搜索(显示共同关注,共同好友)

求两个集合的交、并、差集
sinter key1 key2
sunion  key1 key2
sdiff key1 key2

求两个集合的交、并、差集合并存储到指定集合中
sinterstore destination key1 key2       #sinterstore u3 u1 u2   将u1,u2的交集放到u3中
sunionstore  destination key1 key2
sdiffstore destination key1 key2

将指定数据从原始集合中移动到目标集合中
smove source destination member     #smove u2 u1 a  将u2中的a移动到u1中

 

 

三、Set类型数据操作的注意事项

 

 

四、Set类型应用场景

1.业务场景:多个角色进行权限的去重并集

 

 

解决方案

 

 

 

 

当一个用户存在多个角色,并且每个角色包含多个权限,快速进行权限校验:去除不同角色相同的权限

给角色rid:001设置权限getall/getById
给角色rid:002设置权限getCount/getall/insert

将两个角色相同的权限放进一个新的set中uid:007,求并集

 

2.业务场景:统计网站的PV(访问量),UV(独立访客,cookie值),IP(独立IP)

 

解决方案

利用set对同类数据进行去重

 

posted @ 2020-05-10 21:14  只会玩辅助  阅读(360)  评论(0编辑  收藏  举报