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瘦身指南
May 26 Redis
redis cluster支持pipeline的实现思路
Jun 23 Redis
springboot使用Redis作缓存使用入门教程
Jul 25 Redis
详解Redis在SpringBoot工程中的综合应用
Oct 16 Redis
Redis的字符串是如何实现的
Oct 24 Redis
Redis命令处理过程源码解析
Feb 12 Redis
解决Redis启动警告问题
Feb 24 Redis
Redis中有序集合的内部实现方式的详细介绍
Mar 16 Redis
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
Mar 16 Redis
一文搞懂Redis中String数据类型
Apr 03 Redis
Redis Lua脚本实现ip限流示例
Jul 15 Redis
如何使用注解方式实现 Redis 分布式锁
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中文本操作的类
2007/03/17 PHP
php图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
php数据序列化测试实例详解
2017/08/12 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
Javascript 汉字字节判断
2009/08/01 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
浅谈Vue.js
2017/03/02 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
python3安装crypto出错及解决方法
2019/07/30 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
Python Django view 两种return的实现方式
2020/03/16 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
python利用线程实现多任务
2020/09/18 Python
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
酒店采购员岗位职责
2014/03/14 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
python基础之文件处理知识总结
2021/05/23 Python
sql字段解析器的实现示例
2021/06/23 SQL Server
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL