redis 实现互相关注功能

突然想到平时的设计软件如何实现互相关注这个功能,然后查询后大致思路如下:

可以使用 Redis 数据库来存储关注关系。

在社交网络应用程序中,互相关注功能(也称为双向关注或好友关系)是一种常见的功能,允许用户之间相互关注彼此。在Redis中,可以使用集合(Set)数据结构来实现互相关注功能。

假设我们有两个用户,分别是用户A和用户B,他们之间可以相互关注。

  1. **用户A关注用户B:**

SADD following:A B

```

这个命令将用户A的关注列表中添加了用户B。

  1. **用户B关注用户A:**

SADD following:B A

```

这个命令将用户B的关注列表中添加了用户A。

  1. **检查两个用户是否互相关注:**

SISMEMBER following:A B

SISMEMBER following:B A

```

以上两个命令分别检查用户A的关注列表中是否包含用户B,以及用户B的关注列表中是否包含用户A。如果返回1,表示互相关注,如果返回0,表示未互相关注。

  1. **获取用户A的关注列表:**

SMEMBERS following:A

```

这个命令将返回用户A关注的所有用户的列表。

  1. **获取用户B的关注列表:**

SMEMBERS following:B

```

这个命令将返回用户B关注的所有用户的列表。

需要注意的是,以上示例假设用户ID是唯一的。可以将用户ID作为集合的键,以及关注的用户ID作为集合的成员。。

然后用一个示例 Python 代码,演示了如何实现互相关注功能:

首先,确保已经安装和启动了 Redis 服务器。然后,使用一个 Redis 客户端库(如 redis-py)来与 Redis 交互。

python 复制代码
import redis

# 连接到 Redis 服务器
r = redis.Redis(host='localhost', port=6379, db=0)

# 定义关注和被关注的用户的键名
def get_user_key(user_id):
    return f'user:{user_id}'

# 实现关注功能
def follow_user(user_id, target_user_id):
    user_key = get_user_key(user_id)
    target_user_key = get_user_key(target_user_id)

    # 将 target_user_id 添加到用户的关注列表中
    r.sadd(f'{user_key}:following', target_user_id)

    # 将用户的 user_id 添加到 target_user_id 的粉丝列表中
    r.sadd(f'{target_user_key}:followers', user_id)

# 实现取消关注功能
def unfollow_user(user_id, target_user_id):
    user_key = get_user_key(user_id)
    target_user_key = get_user_key(target_user_id)

    # 从用户的关注列表中移除 target_user_id
    r.srem(f'{user_key}:following', target_user_id)

    # 从 target_user_id 的粉丝列表中移除 user_id
    r.srem(f'{target_user_key}:followers', user_id)

# 获取用户的关注列表
def get_following(user_id):
    user_key = get_user_key(user_id)

    # 获取用户的关注列表
    return r.smembers(f'{user_key}:following')

# 获取用户的粉丝列表
def get_followers(user_id):
    user_key = get_user_key(user_id)

    # 获取用户的粉丝列表
    return r.smembers(f'{user_key}:followers')

# 示例用法
user1_id = 'user1'
user2_id = 'user2'
user3_id = 'user3'

follow_user(user1_id, user2_id)
follow_user(user1_id, user3_id)
follow_user(user2_id, user1_id)

print(f'User1 is following: {get_following(user1_id)}')
print(f'User1 has followers: {get_followers(user1_id)}')

使用 Redis 的集合(Set)来存储用户的关注列表和粉丝列表。sadd 用于将用户添加到关注列表,srem 用于从关注列表中移除用户。通过这些操作,我们可以实现用户之间的互相关注关系,并轻松地获取关注列表和粉丝列表。

相关推荐
gavin_gxh13 分钟前
ORACLE 删除archivelog日志
数据库·oracle
一叶飘零_sweeeet16 分钟前
MongoDB 基础与应用
数据库·mongodb
猿小喵32 分钟前
DBA之路,始于足下
数据库·dba
tyler_download41 分钟前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
编程、小哥哥1 小时前
设计模式之抽象工厂模式(替换Redis双集群升级,代理类抽象场景)
redis·设计模式·抽象工厂模式
weixin_449310841 小时前
高效集成:聚水潭采购数据同步到MySQL
android·数据库·mysql
Cachel wood2 小时前
Github配置ssh key原理及操作步骤
运维·开发语言·数据库·windows·postgresql·ssh·github
standxy2 小时前
如何将钉钉新收款单数据高效集成到MySQL
数据库·mysql·钉钉
Narutolxy3 小时前
MySQL 权限困境:从权限丢失到权限重生的完整解决方案20241108
数据库·mysql
Venchill3 小时前
安装和卸载Mysql(压缩版)
数据库·mysql