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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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,我以前从未使用过redis,但我一直想这么做,而且我目前的用例似乎非常适合 我实际上是在尝试构建一个消息传递应用程序。当一个用户向另一个用户发送消息时,发送到服务器的数据如下所示: { from_user: 'alice', for_user: 'bob', payload: 'hello!', timestamp: 1404695488 } 我希望能够做到的是: 给定alice,查看向alice发送alice尚未阅读的消息的所有用户 给定alice和bob,返回bob发送给alice的所有消

我以前从未使用过redis,但我一直想这么做,而且我目前的用例似乎非常适合

我实际上是在尝试构建一个消息传递应用程序。当一个用户向另一个用户发送消息时,发送到服务器的数据如下所示:

{ from_user: 'alice', for_user: 'bob', payload: 'hello!', timestamp: 1404695488 }
我希望能够做到的是:

  • 给定alice,查看向alice发送alice尚未阅读的消息的所有用户

  • 给定alice和bob,返回bob发送给alice的所有消息的列表,我可以从中弹出alice读到的内容。一旦alice阅读了bob发给她的所有信息,那么#1就不会回复bob了


  • 如果我还不够清楚,请告诉我。此外,我选择redis的另一个原因是,由于这是一个消息传递应用程序,我想利用发布/订阅功能。

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

  • 未读邮件:为存储其未读邮件的每个用户保留一个排序集。使用时间戳作为分数,将时间戳和有效负载作为成员,例如:
    ZADD未读消息:bob:alice 1404695488“1404695488:hello!”

  • 未读邮件的发件人:为存储发件人的每个用户保留一组,即:
    SADD未读发件人:bob alice
    `

  • 向Bob展示所有发送给他尚未阅读的消息的用户,请执行以下操作:成员未读发件人:Bob

    当Bob阅读消息时:

  • 将其从未读排序集中删除-
    ZREM未读邮件:bob:alice“1404695488:hello!”
  • 使用
    存在未读消息:bob:alice
    检查未读消息键是否存在-如果没有留下任何消息,Redis将删除该键。如果密钥已被删除,请从设置为:
    SREM unread senders:bob alice
    的未读发件人中删除相关用户
  • 注意:您可能希望执行实现添加未读消息和原子删除消息的操作,因此请使用MULTI/EXEC block或Lua脚本