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 用于从关注列表中移除用户。通过这些操作,我们可以实现用户之间的互相关注关系,并轻松地获取关注列表和粉丝列表。

相关推荐
oradh1 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789862 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD2 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
TlSfoward3 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记3 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发3 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
SelectDB3 小时前
PostgreSQL 实时同步到 Apache Doris:一站式 CDC 解决方案
数据库
Database_Cool_4 小时前
AI Agent 长期记忆怎么存?阿里云 PolarDB-X 对接 Mem0 记忆框架实践
数据库·阿里云
时空无限4 小时前
vllm 缓存对模型启动时间的影响
缓存·vllm
会编程的土豆4 小时前
数据库范式
数据库·oracle