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持久化与主从复制的实践
Apr 27 Redis
基于Redis实现分布式锁的方法(lua脚本版)
May 12 Redis
了解Redis常见应用场景
Jun 23 Redis
浅析Redis Sentinel 与 Redis Cluster
Jun 24 Redis
redis不能访问本机真实ip地址的解决方案
Jul 07 Redis
嵌入式Redis服务器在Spring Boot测试中的使用教程
Jul 21 Redis
redis 存储对象的方法对比分析
Aug 02 Redis
在项目中使用redis做缓存的一些思路
Sep 14 Redis
为什么RedisCluster设计成16384个槽
Sep 25 Redis
Redis分布式锁的7种实现
Apr 01 Redis
浅谈Redis缓冲区机制
Jun 05 Redis
Redis+AOP+自定义注解实现限流
Jun 28 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
其他功能
2006/10/09 PHP
第十二节--类的自动加载
2006/11/16 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
PHP调用其他文件中的类
2018/04/02 PHP
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
浅析vue数据绑定
2017/01/17 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
小程序实现密码输入框
2020/11/16 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
python读取Excel表格文件的方法
2019/09/02 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
毕业自我鉴定
2013/11/05 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
财务经理岗位职责
2015/01/31 职场文书
小学体育组工作总结
2015/08/13 职场文书
医院病假条范文
2015/08/17 职场文书
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript