Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
redis中通知系统的体系结构_Redis - Fatal编程技术网

redis中通知系统的体系结构

redis中通知系统的体系结构,redis,Redis,我有一个用户通知系统。可以通过id向用户发送个人通知或向所有用户发送广播消息(例如,关于新功能)。现在它是作为数据库中的一个表实现的,其结构如下 <message_id, message_time, user_id, text, is_broadcast> 和业务: 为用户插入消息 获取X消息以供用户Y显示,并将其从数据库中删除(不显示第二次) 为每个用户插入相同的消息(广播消息) 删除所有早于N天的广播消息(不保留长时间未登录用户的广播消息,但不删除个人消息) 现在我正在

我有一个用户通知系统。可以通过id向用户发送个人通知或向所有用户发送广播消息(例如,关于新功能)。现在它是作为数据库中的一个表实现的,其结构如下

<message_id, message_time, user_id, text, is_broadcast>

和业务:

  • 为用户插入消息
  • 获取X消息以供用户Y显示,并将其从数据库中删除(不显示第二次)
  • 为每个用户插入相同的消息(广播消息)
  • 删除所有早于N天的广播消息(不保留长时间未登录用户的广播消息,但不删除个人消息)
现在我正在考虑将整个消息传递系统从MySQL迁移到Redis,但我在选择有效的Redis数据结构方面遇到了问题。我想为每个用户创建一个消息列表/消息集。个人信息也可以,但如果我有广播信息,我需要对所有列表进行迭代,并将信息放在那里。删除旧广播消息也存在同样的问题——我需要迭代所有列表并删除旧消息。有什么方法可以让它变得更容易吗?
谢谢

听起来这两种信息应该分开处理

可能将所有广播消息存储在单个排序集中,其中排序分数是时间戳。这使得ZRANGE轻松获取最新消息,ZREMRANGEBYSCORE轻松删除所有超过N天的广播消息。然后,为了实现广播消息的每用户伪读/未读状态,您可以为每个用户存储他们读到的分数(时间戳)。(在获取时也使用ZRANGE..withscore获取时间戳)

然后,要处理个人消息,请使用每个用户列表。您可以使用LPUSH进行插入,使用LRANGE和LTRIM为用户获取和删除X消息

缺点:每个用户读/未读状态缺乏适当的每广播。优点:避免为每个用户存储相同的广播