网友回复
设计一个即时通讯系统(包含单聊和群聊)并使用Redis存储和管理聊天数据,可以利用Redis的多种数据结构和特性来实现高效的消息存储和检索。以下是一个详细的设计方案:
1. 数据结构设计用户信息可以使用HASH数据结构存储用户信息。
user:{user_id} -> { "username": "user1", "status": "online", ... } 单聊消息使用LIST数据结构存储单聊消息,每个会话一个列表。
chat:{user1_id}:{user2_id} -> [ { "from": "user1", "to": "user2", "msg": "Hello", "timestamp": 1627890123 }, ... ] 群聊消息使用LIST数据结构存储群聊消息,每个群一个列表。
group:{group_id} -> [ { "from": "user1", "msg": "Hello group", "timestamp": 1627890123 }, ... ] 最新消息使用ZSET(有序集合)存储用户的最新消息,以时间戳作为分数。
latest_messages:{user_id} -> { "msg_id1": timestamp1, "msg_id2": timestamp2, ... } 2. 实现单聊和群聊单聊消息存储当用户发送单聊消息时,将消息存储到对应的LIST中,并更新最新消息的有序集合。
import redis
import json
import time
r = redis.Redis(host='localhost', port=6379, db=0)
def send_private_message(from_user, to_user, message):
chat_key = f"chat:{from_user}:{to_user}" if from_user < to_user else f"chat:{to_user}:{from_user}"
msg = {
"from": from_user,
"to": to_user,
"msg": message,
"timestamp": int(time.time())
}
r.rpush(chat_key, json.dumps(...点击查看剩余70%
有没有免费让ai自动帮你接管操作电脑的mcp服务?
mcp为啥用Streamable HTTP 替代 HTTP + SSE?
scratchjr有没有开源的前端html网页版本源代码?
多模态大模型能否根据ui交互视频来来模仿写出前端交互动画效果ui代码?
如何用阿里云oss+函数计算fc+事件总线EventBridge+消息队列+数据库+redis缓存打造一个高并发弹性系统?
阿里云函数计算 FC如何在海外节点搭建一个代理网络?
ai studio中gemini build的代码如何发布到github pages等免费网页托管上 ?
如何在cursor、qoder、trae中使用Claude Skills功能?
有没有不用u盘就能重装系统的开源工具?
python如何固定摄像头实时计算停车场停车位剩余数量?


