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 11 Redis
详解Redis瘦身指南
May 26 Redis
5分钟教你docker安装启动redis全教程(全新方式)
May 29 Redis
浅谈Redis中的RDB快照
Jun 29 Redis
Redis分布式锁Redlock的实现
Aug 07 Redis
Redis模仿手机验证码发送的实现示例
Nov 02 Redis
Window server中安装Redis的超详细教程
Nov 17 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
Redis基本数据类型List常用操作命令
Jun 01 Redis
Redis keys命令的具体使用
Jun 05 Redis
基于redis+lua进行限流的方法
Jul 23 Redis
python中使用redis用法详解
Dec 24 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
PHP伪静态写法附代码
2008/06/20 PHP
zend framework多模块多布局配置
2011/02/26 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
php集成开发环境详解
2019/09/24 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
详解vue 组件注册
2020/11/20 Vue.js
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Django实现快速分页的方法实例
2017/10/22 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
销售人员个人求职信
2013/09/26 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
工作证明格式范文
2015/06/15 职场文书
谢师宴家长致辞
2015/07/27 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
深入解析MySQL索引数据结构
2021/10/16 MySQL
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs