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实现分布式锁的方法(lua脚本版)
May 12 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
Redis主从配置和底层实现原理解析(实战记录)
Jun 30 Redis
redis requires ruby version2.2.2的解决方案
Jul 15 Redis
解析redis hash应用场景和常用命令
Aug 04 Redis
Redis高并发防止秒杀超卖实战源码解决方案
Nov 01 Redis
Redis高可用集群redis-cluster详解
Mar 20 Redis
Redis 操作多个数据库的配置的方法实现
Mar 23 Redis
Redis分布式锁的7种实现
Apr 01 Redis
浅谈Redis的事件驱动模型
May 30 Redis
Redis sentinel哨兵集群的实现步骤
Jul 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获取客户端IP及URL的方法示例
2017/02/03 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
深入认识javascript中的eval函数
2009/11/02 Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
python datetime中strptime用法详解
2019/08/29 Python
python 默认参数相关知识详解
2019/09/18 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
工程类专业自荐信范文
2014/03/09 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
实习生岗位职责
2014/04/12 职场文书
拉歌口号大全
2014/06/13 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
千手观音观后感
2015/06/03 职场文书
MySQL普通表如何转换成分区表
2022/05/30 MySQL