多平台统一管理软件接口,如何实现多平台统一管理软件接口
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~