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实现分布式锁的方法(lua脚本版)
May 12 Redis
Redis 配置文件重要属性的具体使用
May 20 Redis
Redis 彻底禁用RDB持久化操作
Jul 09 Redis
厉害!这是Redis可视化工具最全的横向评测
Jul 15 Redis
详解Redis在SpringBoot工程中的综合应用
Oct 16 Redis
redis缓存存储Session原理机制
Nov 20 Redis
聊聊redis-dump工具安装问题
Jan 18 Redis
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
Mar 16 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
Mar 17 Redis
redis数据结构之压缩列表
Mar 21 Redis
redis 解决库存并发问题实现数量控制
Apr 08 Redis
Redis实现一个账号只能登录一个设备
Apr 19 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详细彻底学习Smarty
2008/03/27 PHP
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
php实现水仙花数示例分享
2014/04/03 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
js资料prototype 属性
2007/03/13 Javascript
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
简单的通用表达式求10乘阶示例
2014/03/03 Python
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
关于django 数据库迁移(migrate)应该知道的一些事
2018/05/27 Python
python散点图实例之随机漫步
2018/08/27 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
2015年消费者权益日活动总结
2015/02/09 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
礼貌问候语大全
2015/11/10 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers