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 11 Redis
Django使用redis配置缓存的方法
Jun 01 Redis
压缩Redis里的字符串大对象操作
Jun 23 Redis
Redis RDB技术底层原理详解
Sep 04 Redis
Redis的字符串是如何实现的
Oct 24 Redis
面试分析分布式架构Redis热点key大Value解决方案
Mar 13 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Apr 01 Redis
Redis 限流器
May 15 Redis
Redis基本数据类型哈希Hash常用操作命令
Jun 01 Redis
Redis实现分布式锁的五种方法详解
Jun 14 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开发大型项目的一点经验
2006/10/09 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
php中如何执行linux命令详解
2018/11/06 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
Python的类实例属性访问规则探讨
2015/01/30 Python
python实现停车管理系统
2018/11/30 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
Python计算IV值的示例讲解
2020/02/28 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
Structs界面控制层技术
2013/10/11 面试题
企业管理培训感言
2014/01/27 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
英文推荐信格式范文
2014/05/09 职场文书