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 11 Redis
Redis分布式锁Redlock的实现
Aug 07 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
使用redis生成唯一编号及原理示例详解
Sep 15 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
redis数据一致性的实现示例
Mar 18 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Apr 01 Redis
redis复制有可能碰到的问题汇总
Apr 03 Redis
解决 redis 无法远程连接
May 15 Redis
Redis 报错 error:NOAUTH Authentication required
May 15 Redis
基于Redission的分布式锁实战
Aug 14 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下把数组保存为文件格式的实例应用
2010/02/08 PHP
php中namespace use用法实例分析
2016/01/22 PHP
小议javascript 设计模式 推荐
2009/10/28 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
python读写json文件的简单实现
2017/04/11 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
详解python eval函数的妙用
2017/11/16 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
营销人才自我鉴定范文
2013/12/25 职场文书
工作表扬信的范文
2014/01/10 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
班训口号大全
2014/06/18 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
公司停电通知
2015/04/15 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
如何在Python项目中引入日志
2021/05/31 Python
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript