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
Redis5之后版本的高可用集群搭建的实现
Apr 27 Redis
Redis实现订单自动过期功能的示例代码
May 08 Redis
基于Redis过期事件实现订单超时取消
May 08 Redis
详解redis分布式锁的这些坑
May 19 Redis
详解Redis主从复制实践
May 19 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
redis使用不当导致应用卡死bug的过程解析
Jul 01 Redis
浅谈redis整数集为什么不能降级
Jul 25 Redis
Redis 限流器
May 15 Redis
Redis基本数据类型String常用操作命令
Jun 01 Redis
基于redis+lua进行限流的方法
Jul 23 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权限分配的实现代码
2013/04/28 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
[03:48]大碗DOTA
2019/07/25 DOTA
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
求职简历自荐信范文
2013/10/21 职场文书
活动邀请函范文
2014/01/19 职场文书
三年大学生活自我鉴定
2014/01/21 职场文书
应届护士求职信范文
2014/01/26 职场文书
小学庆六一活动方案
2014/02/28 职场文书
环境保护建议书
2014/08/26 职场文书
社区务虚会发言材料
2014/10/20 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python