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 08 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 Redis
浅谈Redis的keys命令到底有多慢
Oct 05 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
Mar 17 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
使用Redis做预定库存缓存功能
Apr 02 Redis
Redis特殊数据类型bitmap位图
Jun 01 Redis
Redis基本数据类型哈希Hash常用操作命令
Jun 01 Redis
Redis批量生成数据的实现
Jun 05 Redis
使用Redis实现分布式锁的方法
Jun 16 Redis
Redis实现主从复制方式(Master&Slave)
Jun 21 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
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
实例分析javascript中的异步
2020/06/02 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python translator使用实例
2008/09/06 Python
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
python实现机器人行走效果
2018/01/29 Python
Python中的CSV文件使用"with"语句的方式详解
2018/10/16 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
香港礼品网站:GiftU eshop
2017/09/01 全球购物
暑期实践思想汇报
2014/01/06 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
高三励志标语
2014/06/05 职场文书
酒后驾车标语
2014/06/30 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2015年林业工作总结
2015/05/14 职场文书
行政复议答复书
2015/07/01 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
分享Python异步爬取知乎热榜
2022/04/12 Python