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遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 Redis
基于Redis过期事件实现订单超时取消
May 08 Redis
使用Redis实现实时排行榜功能
Jul 02 Redis
Redis分布式锁Redlock的实现
Aug 07 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
SpringBoot集成Redis的思路详解
Oct 16 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
Mar 17 Redis
Grafana可视化监控系统结合SpringBoot使用
Apr 19 Redis
Redis+AOP+自定义注解实现限流
Jun 28 Redis
基于Redission的分布式锁实战
Aug 14 Redis
Redis主从复制操作和配置详情
Sep 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
Terran魔法科技
2020/03/14 星际争霸
PHP 变量类型的强制转换
2009/10/23 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
Zend Framework教程之Autoloading用法详解
2016/03/08 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
python支付宝支付示例详解
2019/08/22 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
先进德育工作者事迹材料
2014/01/24 职场文书
法律顾问服务方案
2014/05/15 职场文书
手机被没收的检讨书
2014/10/04 职场文书
在校证明模板
2015/06/17 职场文书
nginx rewrite功能使用场景分析
2022/05/30 Servers