Redis set和sorted_set数据类型

网友投稿 415 2022-11-01


Redis set和sorted_set数据类型

文章目录

​​一、set类型概念​​​​二、set类型数据的基本操作​​​​三、set类型数据的扩展操作​​

​​1. 业务场景一:资讯推荐​​​​2. 业务场景二:可能认识的好友推荐​​​​3. 业务场景三:多角色权限校验​​​​4. 业务场景四:统计网站访问量​​​​5. 业务场景五:黑名单​​

​​四、set数据类型使用的注意事项​​​​五、sorted_set类型概念​​​​六、sorted_set类型数据的基本操作​​​​七、sorted_set类型数据的扩展操作​​

​​1. 业务场景一:实时显示资讯热度​​​​2. 业务场景二:限时操作​​

​​八、sorted_set数据类型使用的注意事项​​

一、set类型概念

新的存储需求:存储大量的数据,在查询方面提供更高的效率 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询 set类型:与hash存储结构完全相同,底层数据结构使用哈希表,仅存储field,不存储value(nil),并且field不允许重复

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

添加数据

sadd key member1 [member2]

获取全部数据

smembers key

删除数据

srem key member1 [member2]

获取集合数据总量

scard key

判断集合中是否包含指定数据

sismember key member

set底层使用的是拉链法哈希表,没有顺序可言(sorted_set底层是跳跃表,有顺序)

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

1. 业务场景一:资讯推荐

每位用户首次使用进入头条时候会设置3项爱好的内容,但是后期为了增加用户的活跃度,必须让用户对其他信息类别逐渐产生兴趣,增加客户留存度,如何实现?

业务分析

平台分析出各个分类的最新或最热点信息并组织成set集合,随机挑选其中部分信息,配合用户关注信息分类中的热点信息,组织展示信息集合

解决方案

随机获取集合中指定数量的数据(推荐后还从这个集合中继续推荐)

srandmember key [count]

随机获取集合中的某个数据并将该数据移出集合(推荐过的类别就不推荐了)

spop key

redis应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热点旅游线路,应用APP推荐,大V推荐等

2. 业务场景二:可能认识的好友推荐

求两个集合的交、并、差集

sinter key1 [key2]sunion key1 [key2]sdiff key1 [key2]

求两个集合的交、并、差集并存储到指定集合中

sinterstore destination key1 [key2]sunionstore destination key1 [key2]sdiffstore destination key1 [key2]

将指定元素从原始集合移动到目标集合中

smove source destination member # source里面的member移到destination

redis应用于同类信息的关联搜索,二度关联搜索,深度关联搜索显示共同关注(一度)显示共同好友(一度)由用户A出发,获取到好友用户B的好友信息列表(一度)由用户A出发,获取到好友用户B的购物清单列表(二度)由用户A出发,获取到好友用户B的游戏充值列表(二度)

3. 业务场景三:多角色权限校验

集团公司共具有12000名员工,内部OA系统中具有700多个角色,3000多个业务操作,23000多种数据,每位员工具有一个或多个角色,如何判断某员工是否能执行某个操作呢?

解决方案

利用set集合数据不重复的特征,完成数据过滤与快速查询根据用户id获取用户所有角色把人对应的角色所有的操作放在一个set集合中

一个用户有两个角色,每个角色有2~3个允许的操作

此外,我们还可以用sismember判断要执行的操作是否在允许范围内

redis提供基础数据还是提供校验结果?

需要注意一下,第二种判断方式是在redis中进行的,然而redis只负责读写数据,业务逻辑不应该在redis中执行,第二种方式耦合性高。相较之下,第一种方式只是从redis中获取了所有允许的操作,然后再用业务代码判断当前操作是否允许执行,这样就把业务和数据分开了,耦合性低

4. 业务场景四:统计网站访问量

公司对旗下新的网站做推广,需要统计网站的PV(访问量),UV(独立访客),IP(独立IP)

PV:网站被访问次数,可通过刷新页面提高访问量UV:网站被不同用户访问的次数,可通过cookie统计访问量,相同用户切换IP地址,UV不变IP:网站被不同IP地址访问的总次数,可通过IP地址统计访问量,相同IP不同用户访问,IP不变

解决方案

利用set集合的数据去重特征,记录各种访问数据建立string类型数据,利用incr统计日访问量(PV)建立set模型,记录不同的cookie数量(UV),以及不同的IP数量(IP)

5. 业务场景五:黑名单

周期性更新满足规则的用户黑名单,加入set集合用户行为信息达到后与黑名单进行比对,确认行为去向黑名单过滤IP地址:应用于开放游客访问权限的信息源黑名单过滤设备信息:应用于限定访问设备的信息源黑名单过滤用户:应用于基于访问权限的信息源

四、set数据类型使用的注意事项

set类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份set虽然与hash的存储结构相同,但是无法启用set中存储value的空间

五、sorted_set类型概念

新的存储需求:根据排序有利于数据的有效显示,需要提供一种可以排序的存储方式(sorted_set底层基于跳跃表)需要的存储结构:新的存储模型,可以保存可排序的数据sorted_set类型:在set的存储结构基础上添加可排序字段

在hash数据类型存储空间的基础上,增加了一列score,sorted_set使用score进行排序,同样的field存数据,value依然不存数据

六、sorted_set类型数据的基本操作

添加数据

zadd key score1 member1 [score2 member2]

获取全部数据

zrange key start stop [WITHSCORES] # 升序排列,WITHSCORES表示带score输出zrevrange key start stop [WITHSCORES] # 降序排列

删除数据

zrem key member [member …]

按score条件获取数据

zrangebyscore key min max [WITHSCORES] [LIMIT] # limit表示显示几条数据,通常用于分页,左闭右开zrevrangebyscore key max min [WITHSCORES]

按score条件以及索引删除

zremrangebyscore key min max # 删除key对应的sorted_set中,score介于[min, max]之间的元素zremrangebyrank key start stop # 由于sorted_set是排序的,可按照索引删除[start, stop]之间的元素

注意:

min与max用于限定搜索查询的条件start与stop用于限定查询范围,作用于索引,表示开始和结束索引offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量

获取集合数据总量

zcard key # 获取sorted_set中元素个数zcount key min max # 获取sorted_set中,score介于[min, max]的元素个数

集合交、并操作

# 求交集,默认把相同元素的score求和(也可以求 MIN|MAX),numkeys表示求交集的sorted_set的数量zinterstore destination numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]zunionstore destination numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

七、sorted_set类型数据的扩展操作

1. 业务场景一:实时显示资讯热度

票选广东十大杰出青年,各类综艺选秀海选投票各类资源网站TOP10(电影,歌曲,文档,电商,游戏等)聊天室活跃度统计游戏好友亲密度

获取数据对应的索引(排名)

zrank key memberzrevrank key member

score 值获取与修改

zscore key memberzincrby key increment member

2. 业务场景二:限时操作

某网盘有限时体验VIP加速功能,如何用redis实现限时操作?

对于基于时间线限定的任务处理,将处理时间记录为score,利用排序功能区分处理的先后顺序为提升sorted_set的性能,通常将任务根据特征存储成若干个sorted_set。例如1小时内,1天内,年度等,操作时逐渐提升,将即将操作的若干个任务纳入到1小时内处理队列中

获取当前系统时间命令:time

八、sorted_set数据类型使用的注意事项

score 保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时侯要慎重sorted_set底层存储还是基于set结构的,因此元素(field)不能重复,如果重复添加相同的数据,score值将被覆盖,保留最后一次修改的结果


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux三剑客awk数组、判断、循环
下一篇:利用springmvc处理模型数据
相关文章

 发表评论

暂时没有评论,来抢沙发吧~