redis实现共同好友的思路详解

背景

​ 微信朋友圈的点赞、评论,只能看到自己好友的信息。这就涉及到了一个共同好友的概念,通过redis的set集合可以很轻松的实现此功能。

共同好友实现思路

每个人的好友存放在set集合中。key的名字为friend_{userId}。如下图:

  1. 用户1的好友为2,3,4
  2. 用户2的好友为1,3,4
  3. 用户3的好友为1,4,5

交集

用户1和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> SINTER friend_1 friend_2
1) “4”

sadd 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。命令详解

SINTER 返回给定所有给定集合的交集。命令详解

并集

获得所有的好友信息。

127.0.0.1:6379> SUNION friend_1 friend_2
1) “1”
2) “2”
3) “3”
4) “4”
5) “5”

SUNION 返回给定集合的并集。命令详解

差集

可以用户好友推荐。差集出来的用户推荐给用户2。

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实现共同好友的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解Redis瘦身指南

    Redis内存回收 Redis 服务器的最大占用内存量由配置项 maxmemory 决定,我们可以通过 config set maxmemory 2GB 的格式来配置.一旦 Redis 内存满,所有引起内存增加的操作都会被返回 error.作为专业 Redis 服务器我们通常将此项设置为0,以服务器系统内存来作为限制: 那么 Redis 使用内存达到了上限怎么办?Redis 为我们提供了几种选项以自动回收内存,可以通过配置项 maxmemory-policy 来配置: noeviction 不回

  • 基于Docker搭建Redis主从集群的实现

    最近陆陆续续有不少园友加我好友咨询 redis 集群搭建的问题,我觉得一定是之前写的这篇 <基于Docker的Redis集群搭建> 文章有问题了,所以我花了几分钟浏览之前的文章总结了下面几个问题: redis 数量太少,只创建了 3 个实例:由于只有 3 个实例,所以全部只能是主节点,无法体现集群主从关系:如何搭建主从集群?如何分配从节点? 基于之前的文章,我想快速的过一下这几个问题,本文基于 Docker + Redis 5.0.5 版本,通过 cluster 方式创建一个 6 个 redi

  • redis实现共同好友的思路详解

    背景 ​ 微信朋友圈的点赞.评论,只能看到自己好友的信息.这就涉及到了一个共同好友的概念,通过redis的set集合可以很轻松的实现此功能. 共同好友实现思路 每个人的好友存放在set集合中.key的名字为friend_{userId}.如下图: 用户1的好友为2,3,4 用户2的好友为1,3,4 用户3的好友为1,4,5 交集 用户1和2是好友.他们的共同好友可以通过他们的交集获取. redis命令示例: 127.0.0.1:6379> sadd friend_1 2 3 4 (integer

  • 基于redis实现的点赞功能设计思路详解

    前言 点赞其实是一个很有意思的功能.基本的设计思路有大致两种, 一种自然是用mysql等 数据库直接落地存储, 另外一种就是利用点赞的业务特征来扔到redis(或memcache)中, 然后离线刷回mysql等. 直接写入Mysql 直接写入Mysql是最简单的做法. 做两个表即可, 1.post_like 记录文章被赞的次数,已有多少人赞过这种数据就可以直接从表中查到; 2.user_like_post 记录用户赞过了哪些文章, 当打开文章列表时,显示的有没有赞过的数据就在这里面; 缺点 1.

  • redis 实现登陆次数限制的思路详解

    title: redis-login-limitation  利用 redis 实现登陆次数限制, 注解 + aop, 核心代码很简单. 基本思路 比如希望达到的要求是这样: 在 1min 内登陆异常次数达到5次, 锁定该用户 1h 那么登陆请求的参数中, 会有一个参数唯一标识一个 user, 比如 邮箱/手机号/userName 用这个参数作为key存入redis, 对应的value为登陆错误的次数, string 类型, 并设置过期时间为 1min. 当获取到的 value == "4&qu

  • python发qq消息轰炸虐狗好友思路详解(完整代码)

    因为我的某个好友在情人节的时候秀恩爱,所以我灵光一闪制作了qq消息轰炸并记录了下来. 首先 我的编程环境是: windows 10系统 python3.6 记得要下载win32 pip install win32 思路介绍 其实也非常简单 将要发出去的句子储存在列表中 然后用随机模块调用 将随机出来的元素储存在剪贴板中 连接QQ 找到指定对象 疯狂输出 怎么样,简单吧 开始打代码吧 import random import win32gui as a import win32con as b i

  • 利用Hadoop实现求共同好友的示例详解

    目录 前言 业务分析 实现思路分析 编码实现 1.第一个map类 2.第一个Reduce类 3.第一个Job类 4.第二个map类 5.第二个Reducer类 6.第二个Job类 前言 在很多社交APP中,比如大家熟悉的QQ好友列表中,打开会话框,经常可以看到下面有一栏共同好友的推荐列表,用户通过这种方式,可以添加潜在的关联好友 这种功能该如何实现呢?对redis比较了解的同学应该能很快想到,可以使用redis来实现这个功能.没错,redis确实是个不错的可以实现这个功能的方案. 但redis的

  • Redis 实现队列原理的实例详解

    Redis 实现队列原理的实例详解 场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求 ·抢购场景,先入先出的模式 命令: rpush + blpop 或 lpush + brpop rpush : 往列表右侧推入数据 blpop : 客户端阻塞直到队列有值输出 简单队列: simple.php $stmt = $pdo->prepare('select id, c

  • AJAX页面状态保持思路详解

    传统的页面,浏览器通过url访问页面,页面的内容由后台服务生成页面所有内容再发回给浏览器渲染展示.到AJAX流行的时候,很多信息为AJAX异步请求,比如:点击.翻页等.通常这种情况你一刷新浏览器,当前页面就会重置到初始状态.更不用说把看到的信息url发给好友了. 传统的状态保存在地址栏,如: www.abc.com/search?s=abc&id=23&page=3 如果通过这种方式的话,浏览器会刷新页面,如果使用锚点的话则不会刷新浏览器.具体是点击页面去请求数据的同时会改变地址栏&quo

  • ASP.NET Core WebSocket集群实现思路详解

    目录 前言 实现 nginx配置 一对一发送 群组发送 发送所有人 整合到一起 一对一处理 群组处理 全员消息处理 示例源码 总结 前言 提到WebSocket相信大家都听说过,它的初衷是为了解决客户端浏览器与服务端进行双向通信,是在单个TCP连接上进行全双工通讯的协议.在没有WebSocket之前只能通过浏览器到服务端的请求应答模式比如轮询,来实现服务端的变更响应到客户端,现在服务端也可以主动发送数据到客户端浏览器.WebSocket协议和Http协议平行,都属于TCP/IP四层模型中的第四层

  • 关于日期正则表达式的思路详解

    1        概述 首先需要说明的一点,无论是Winform,还是Webform,都有很成熟的日历控件,无论从易用性还是可扩展性上看,日期的选择和校验还是用日历控件来实现比较好. 前几天在CSDN多个版块看到需要日期正则的帖子,所以整理了这篇文章,和大家一起讨论交流,如有遗漏或错误的地方,还请大家指正. 日期正则一般是对格式有要求,且数据不是直接由用户输入时使用.因应用场景的不同,写出的正则也不同,复杂程度也自然不同.正则的书写需要根据具体情况具体分析,一个基本原则就是:只写合适的,不写复杂

  • PHPCMS V9 添加二级导航的思路详解

    今天看了看phpcms 写到二级导航时发现点问题,查询导航栏的信息时返回的$r[arrchildid]与自己想象的不符,文档上说是返回子栏目id但是却有些不同. 开始的思路: <ul class="nav navbar-nav"> <li class="active"><a href="{siteurl($siteid)}">首页</a></li> {pc:content action=

随机推荐