简介
如何使用 hset+set来做个关系型数据保存。
要设计一个 Redis 方案来存储 Telegram Bot 加入的群信息,包括群名称、加入时间,并支持删除操作和获取群列表,以下是一个可能的设计方案:
设计需求:
- 存储每个 Telegram Bot 加入的群信息,包括 群ID、群名称 和 加入时间。
- 当 Bot 退出群时,删除该群的记录。
- 能够获取当前 Bot 已加入的所有群信息。
数据结构选择:
- Redis Hash (哈希):用于存储每个群的具体信息,如群名称和加入时间。
- Redis Set (集合):用于存储 Bot 加入的所有群的 ID,便于去重和高效查询。
设计方案:
1. 使用 Redis Hash 存储群的详细信息
- 使用一个 Redis
Hash
,每个群的详细信息(群名称和加入时间)存储为键值对。 key
:bot:{bot_id}:group:{group_id}
(每个群的详细信息以群 ID 为 key 区分)fields
:name
: 群名称join_time
: 加入时间(可以是时间戳)
2. 使用 Redis Set 存储加入的群 ID
- 使用一个 Redis
Set
,存储当前 Bot 加入的所有群的 ID,保证群 ID 唯一且去重。 key
:bot:{bot_id}:groups
- 通过
SADD
命令添加群 ID,SREM
删除群 ID,SMEMBERS
获取所有群 ID。
实现操作:
1. 存储群加入信息
当 Bot 加入群时,需要存储群 ID、群名称、和加入时间。
1 | # 设定群详细信息 |
2. 删除群退出信息
当 Bot 退出群时,删除相应的群记录和从群 ID 列表中移除。
1 | # 删除群详细信息 |
3. 获取当前已加入的群列表
可以通过以下步骤获取 Bot 当前加入的所有群的详细信息:
获取所有群 ID:
1
SMEMBERS bot:{bot_id}:groups
获取每个群的详细信息:
1
HGETALL bot:{bot_id}:group:{group_id}
具体示例:
场景 1:存储 Bot 加入了群
假设 Bot ID 是 12345
,加入了群 1001
,群名称是 Tech Group
,加入时间为 2024-09-21 12:00
(时间戳 1695297600
)。
1 | # 存储群详细信息 |
场景 2:删除 Bot 退出群
当 Bot 退出群 1001
时,删除相应的记录:
1 | # 删除群详细信息 |
场景 3:获取 Bot 当前已加入的群
获取所有已加入的群:
1 | # 获取所有群 ID |
获取某个群的详细信息:
1 | # 获取群 1001 的详细信息 |
总结:
- 使用 Redis Set 存储 Bot 加入的群 ID,方便群 ID 去重及高效查询。
- 使用 Redis Hash 存储每个群的详细信息,如群名称和加入时间。
SADD
和SREM
用于添加或删除群 ID,HSET
和DEL
用于存储和删除群的详细信息。
这个设计方案简单高效,适用于 Telegram Bot 加入群组的场景,同时易于扩展。