redis实现共同好友的思路详解


Posted in Redis onMay 26, 2021

背景

​ 微信朋友圈的点赞、评论,只能看到自己好友的信息。这就涉及到了一个共同好友的概念,通过redis的set集合可以很轻松的实现此功能。

共同好友实现思路

每个人的好友存放在set集合中。key的名字为friend_{userId}。如下图:

redis实现共同好友的思路详解

  1. 用户1的好友为2,3,4
  2. 用户2的好友为1,3,4
  3. 用户3的好友为1,4,5

交集

用户1和2是好友。他们的共同好友可以通过他们的交集获取。

redis实现共同好友的思路详解

redis实现共同好友的思路详解

redis命令示例:

127.0.0.1:6379> sadd friend_1 2 3 4
(integer) 3
127.0.0.1:6379> sadd friend_2 1 4 5
(integer) 3
127.0.0.1:6379> SINTER friend_1 friend_2
1) “4”

sadd 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。命令详解

SINTER 返回给定所有给定集合的交集。命令详解

并集

获得所有的好友信息。

redis实现共同好友的思路详解

127.0.0.1:6379> SUNION friend_1 friend_2
1) “1”
2) “2”
3) “3”
4) “4”
5) “5”

SUNION 返回给定集合的并集。命令详解

差集

可以用户好友推荐。差集出来的用户推荐给用户2。

redis实现共同好友的思路详解

127.0.0.1:6379> sadd friend_1 2 3 4
(integer) 3
127.0.0.1:6379> sadd friend_2 1 4 5
(integer) 3
127.0.0.1:6379> SDIFF friend_1 friend_2
1) “2”
2) “3”

SDIFF 返回第一个集合与其他集合之间的差异。命令详解

更多set命令说明:

序号 命令及描述
1 SADD key member1 [member2] 向集合添加一个或多个成员
2 SCARD key 获取集合的成员数
3 SDIFF key1 [key2] 返回给定所有集合的差集
4 SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中
5 SINTER key1 [key2] 返回给定所有集合的交集
6 SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中
7 SISMEMBER key member 判断 member 元素是否是集合 key 的成员
8 SMEMBERS key 返回集合中的所有成员
9 SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合
10 SPOP key 移除并返回集合中的一个随机元素
11 SRANDMEMBER key [count] 返回集合中一个或多个随机数
12 SREM key member1 [member2] 移除集合中一个或多个成员
13 SUNION key1 [key2] 返回所有给定集合的并集
14 SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中

以上就是redis实现共同好友功能的详细内容,更多关于redis实现共同好友的资料请关注三水点靠木其它相关文章!

Redis 相关文章推荐
基于Redis过期事件实现订单超时取消
May 08 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
k8s部署redis cluster集群的实现
Jun 24 Redis
浅谈Redis中的RDB快照
Jun 29 Redis
Redis主从配置和底层实现原理解析(实战记录)
Jun 30 Redis
springboot使用Redis作缓存使用入门教程
Jul 25 Redis
redis缓存存储Session原理机制
Nov 20 Redis
redis数据结构之压缩列表
Mar 21 Redis
Redis监控工具RedisInsight安装与使用
Mar 21 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Apr 01 Redis
redis复制有可能碰到的问题汇总
Apr 03 Redis
详解Redis瘦身指南
May 26 #Redis
Redis高级数据类型Hyperloglog、Bitmap的使用
May 24 #Redis
redis实现排行榜功能
May 24 #Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 #Redis
Redis 配置文件重要属性的具体使用
May 20 #Redis
浅谈redis缓存在项目中的使用
May 20 #Redis
详解Redis主从复制实践
You might like
PHP的几个常用数字判断函数代码
2012/04/24 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
js实现消息滚动效果
2017/01/18 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
[01:37]TI4西雅图DOTA2前线报道 VG拿下首胜教练357给出获胜秘诀
2014/07/10 DOTA
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
高效使用Python字典的清单
2018/04/04 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
Python绘制股票移动均线的实例
2019/08/24 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
保时捷设计:Porsche Design
2019/03/30 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
自荐信格式技巧有哪些呢
2013/11/19 职场文书
工作自我评价分享
2013/12/01 职场文书
竞争上岗实施方案
2014/03/21 职场文书
关于美容院的活动方案
2014/08/14 职场文书
部队个人年终总结
2015/03/02 职场文书
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js
Mysql中mvcc各场景理解应用
2022/08/05 MySQL