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配置文件中常用配置详解
Apr 14 Redis
Redis5之后版本的高可用集群搭建的实现
Apr 27 Redis
Redis实现订单自动过期功能的示例代码
May 08 Redis
详解redis分布式锁的这些坑
May 19 Redis
5分钟教你docker安装启动redis全教程(全新方式)
May 29 Redis
Windows中Redis安装配置流程并实现远程访问功能
Jun 07 Redis
你真的了解redis为什么要提供pipeline功能
Jun 22 Redis
使用redis生成唯一编号及原理示例详解
Sep 15 Redis
SpringBoot集成Redis的思路详解
Oct 16 Redis
redis调用二维码时的不断刷新排查分析
Apr 01 Redis
Redis官方可视化工具RedisInsight安装使用教程
Apr 19 Redis
Redis高并发缓存架构性能优化
May 15 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 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
js预载入和JavaScript Image()对象使用介绍
2011/08/28 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
vue实现购物车的监听
2020/04/20 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
用Python编写一个国际象棋AI程序
2014/11/28 Python
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
八大排序算法的Python实现
2021/01/28 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
Python Requests库基本用法示例
2018/08/20 Python
Python rstrip()方法实例详解
2018/11/11 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
毕业生学校推荐信范文
2014/05/21 职场文书
党性教育心得体会
2014/09/03 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python