新的存储需求:存储大量的数据,在查询方面提供更高的效率
需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
set类型:与hash存储结构完全相同,底层数据结构使用哈希表,仅存储field,不存储value(nil),并且field不允许重复
添加数据
sadd key member1 [member2]
获取全部数据
smembers key
删除数据
srem key member1 [member2]
获取集合数据总量
scard key
判断集合中是否包含指定数据
sismember key member
set底层使用的是拉链法哈希表,没有顺序可言(sorted_set底层是跳跃表,有顺序)
每位用户首次使用进入头条时候会设置3项爱好的内容,但是后期为了增加用户的活跃度,必须让用户对其他信息类别逐渐产生兴趣,增加客户留存度,如何实现?
业务分析
平台分析出各个分类的最新或最热点信息并组织成set集合,随机挑选其中部分信息,配合用户关注信息分类中的热点信息,组织展示信息集合
解决方案
随机获取集合中指定数量的数据(推荐后还从这个集合中继续推荐)
srandmember key [count]
随机获取集合中的某个数据并将该数据移出集合(推荐过的类别就不推荐了)
spop key
redis应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热点旅游线路,应用APP推荐,大V推荐等
脉脉为了促进用户间的交流,保障业务成单率的提升,需要让每位用户拥有大量的好友,事实上职场新人不具有更多的职场好友,如何快速为用户积累更多的好友?(推荐同一所学校的,推荐朋友的朋友…)
新浪微博为了增加用户热度,提高用户留存性,需要微博用户在关注更多的人,以此获得更多的信息或热门话题,如何提高用户关注他人的总量?(推荐关注同一个博主的…)
QQ新用户入网年龄越来越低,这些用户的朋友圈交际圈非常小,往往集中在一所学校甚至一个班级中,如何帮助用户快速积累好友用户带来更多的活跃度?(推荐朋友的朋友…)
微信公众号是微信信息流通的渠道之一,增加用户关注的公众号成为提高用户活跃度的一种方式,如何帮助用户积累更多关注的公众号?(推荐关注相同公众号的…)
求两个集合的交、并、差集
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
集团公司共具有12000名员工,内部OA系统中具有700多个角色,3000多个业务操作,23000多种数据,每位员工具有一个或多个角色,如何判断某员工是否能执行某个操作呢?
解决方案
一个用户有两个角色,每个角色有2~3个允许的操作
此外,我们还可以用sismember判断要执行的操作是否在允许范围内
redis提供基础数据还是提供校验结果?
需要注意一下,第二种判断方式是在redis中进行的,然而redis只负责读写数据,业务逻辑不应该在redis中执行,第二种方式耦合性高。相较之下,第一种方式只是从redis中获取了所有允许的操作,然后再用业务代码判断当前操作是否允许执行,这样就把业务和数据分开了,耦合性低
公司对旗下新的网站做推广,需要统计网站的PV(访问量),UV(独立访客),IP(独立IP)
解决方案
在hash数据类型存储空间的基础上,增加了一列score,sorted_set使用score进行排序,同样的field存数据,value依然不存数据
添加数据
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]之间的元素
注意:
获取集合数据总量
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]
获取数据对应的索引(排名)
zrank key member
zrevrank key member
score 值获取与修改
zscore key member
zincrby key increment member
某网盘有限时体验VIP加速功能,如何用redis实现限时操作?
获取当前系统时间命令:time
因篇幅问题不能全部显示,请点此查看更多更全内容