redis - 构造redis密钥

  显示原文与译文双语对照的内容
0 0

我以前从来没有使用过 tmodel,但是我一直在意,我的当前用例是适当的。

我本质上是想建立一个消息应用。 当一个用户发送另一条消息时,发送到服务器的数据如下所示:

{ from_user: 'alice', for_user: 'bob', payload: 'hello!', timestamp: 1404695488 }

接下来我想做的是:

  1. 给爱丽丝,请看所有已经经发送了alice消息的用户,但是爱丽丝尚未阅读

  2. 给了alice和 bob,返回bob发送的所有消息的列表,我可以以弹出alice读到的信息。 一旦alice读到了bob发送给她的所有信息,那么 #1 将不会返回 bob 。

如果我还没有明确,请让我知道。 另外,另一部分原因是,因为这是一个消息传递应用程序,所以我想使用 of 。

时间:原作者:1个回答

0 0

一种方法是在发送消息时更新以下数据结构:

  1. 未读邮件:为存储未阅读邮件的每个用户保留一个已经排序的设置。 使用时间戳作为分数,并将时间戳&有效负载作为成员,比如: ZADD unread-messages:bob:alice 1404695488"1404695488:hello!"

  2. 未读邮件:为每个存储发件人的用户保留一个设置,i.e.: SADD unread-senders:bob alice 。`

向所有已经发送他消息的用户展示 Bob,但是他还没有阅读 SMEMBERS unread-senders:bob

当Bob读取消息时:

  1. 从未读排序集删除它 ZREM unread-messages:bob:alice"1404695488:hello!"
  2. 如果没有留下任何消息,请检查未读消息密钥是否存在。 如果删除了密钥,请从未阅读的发件人集删除相关的用户: SREM unread-senders:bob alice

注意 : 你需要执行实现未读消息并自动删除的操作,因此使用多个/exec块或者一个Lua脚本作为目的。

原作者:
...