博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Redis实现关注关系
阅读量:6434 次
发布时间:2019-06-23

本文共 1238 字,大约阅读时间需要 4 分钟。

最近使用关系型数据库实现了用户之间的关注,于是思考换一种思路,使用Redis实现用户之间的关注关系。

综合考虑了一下Redis的几种数据结构后,觉得可以用集合实现一下。

假设“我”的ID是1,“别人”的ID是2。

一、添加关注

添加关注分为两步:1、将对方id添加到自己的关注列表中;2、将自己的id添加到对方的粉丝列表中:

SADD 1:follow 2SADD 2:fans 1

二、取消关注

取消关注同样分为两步:1、将对方id从自己的关注列表中移除;2、将自己的id从对方的粉丝列表中移除:

SREM 1:follow 2SREM 2:fans 1

三、关注列表

查看我的关注列表:

SMEMBERS 1:follow

查看别人的把id换掉就可以

四、粉丝列表

查看我的粉丝列表:

SMEMBERS 2:fans

查看别人的把id换掉就可以

五、人物关系

5.1 我单向关注他

我单向关注他,要同时满足两个条件:1、我的关注列表中他(或他的粉丝列表中我);2、我的粉丝列表中没有他(或他的关注列表中没有我)。

SISMEMBER 1:follow 2  #trueSISMEMBER 1:fans 2    #false

5.2 他单向关注我

他单向关注我,要同时满足两个条件:1、我的关注列表中没有他(或他的粉丝列表中没有我);2、我的粉丝列表中他(或他的关注列表中我)。

SISMEMBER 1:follow 2  #falseSISMEMBER 1:fans 2    #true

5.3 我和某人是否互粉

我和某人是否互粉,要同时满足两个条件:1、我的关注列表中有他(或他的粉丝列表中有我);2、我的粉丝列表中有他(或他的关注列表中有我)。同时成立才为互粉。

SISMEMBER 1:follow 2  #trueSISMEMBER 1:fans 2    #true

互粉的关系是互相的,也可以反过来查。

六、我的互粉

查询和我互粉的人,实际是对我的关注和我的粉丝求交集

SINTER 1:follow 1:fans

七、共同关注

查询1和2的共同关注,实际是1的关注和2的关注求交集

SINTER 1:follow 2:follow

八、数量相关

8.1 我的关注数

SCARD 1:follow

8.2 我的粉丝数

SCARD 1:fans

九、问题

目前存在的问题是,我的关注列表 & 我的粉丝列表,无法做到按关注时间排序,终端下显示是结果按ID正序排列的。

考虑的解决方案是添加关注时同时存一份有序集合,关注时的时间戳是score。

ZADD 1:follow 1457871625 2ZADD 2:fans 1457871625 1

那么我的关注列表是:

ZREVRANGE 1:follow 0 -1

同时,ZREVRANGE查询时的索引可以作为分页游标,基本解决目前的问题。

粉丝列表同理。

要不要留自己博客,留吧。以后觉得不合适再删。

转载地址:http://uhhga.baihongyu.com/

你可能感兴趣的文章
果断收藏!六大主流大数据采集平台架构分析
查看>>
嵌入式产品开发设计需要考虑的问题总结
查看>>
物联网还是联网物?
查看>>
以持续集成工具实现DevOps之禅
查看>>
InfoComm China 2016“全球新产品发布活动” —— 汇聚众多革新设备及技术
查看>>
格瑞光电:智慧城市建设的引领者
查看>>
超级寒潮考验智慧城市万亿投资
查看>>
Radware发布2015-2016年全球应用及网络安全报告
查看>>
从“负电价”说起:谈谈德国新能源消纳的借鉴意义
查看>>
惠普大佬:未来30年四大趋势将推动科技产业发展
查看>>
大数据视域下网络涉军舆情管控研究
查看>>
光伏发电项目将全面摸底复核
查看>>
国内传感器市场也许正处在最好的时候
查看>>
单多晶之争:光伏技术要靠市场检验
查看>>
窄带物联网有望结束技术应用“碎片化”
查看>>
SaaS服务创投:场景多元化 平台建设稳中有序
查看>>
江苏:5G先行,智慧江苏再进一步
查看>>
烟台农业走进物联网大数据时代
查看>>
AT&T开源项目反客为主
查看>>
Web应用安全--攻防对抗发展趋势
查看>>