基于Redis的Set实现共同好友微关系
1、概述
使用redis的set集合实现共同好友
在开发中,我们可能需要计算出关羽和张飞共同关注的人有哪些?也就是关注关羽的人和关注张飞的人。我们如何通过计算把两个人的关注相同的人找出来。如果我们使用SQL如何进行编写呢?
比如:关羽关注了10个人,张飞关注了50个人,怎么计算两个人共同关注了那些人。
-
SQL
一般采用in或者not in来实现,但是对于高并发的情况下in和not in是不可取的,就算优化使用了索引,性能也会很差。
-
一般解决方案:
Redis
Redis的set集合数据结构,非常适合的存储好友、关注、粉丝和感兴趣的人的集合。
1、sinter交集命令:获得A和B两个用户共同的好友
sinter A B --- 1
2、sismember命令:可以判断某个用户是B的好友。
3、scard命令:可以获取好友的数量。
02、具体实现
需求:
把关羽的关注列表和张飞的关注列表:
关羽的关注列表:followee:user:2
张飞的关注列表:followee:user:3
sinter followee:user:2 followee:user:3
package com.example.controller;
import com.example.entity.User;
import com.example.service.FollowerService