【问题标题】:How to store chat messages in Redis using Erlang client?如何使用 Erlang 客户端在 Redis 中存储聊天消息?
【发布时间】:2014-03-11 19:43:54
【问题描述】:

我正在使用 ejabberd 作为服务器和 Redis 作为用于存储聊天消息的数据库的 android 聊天应用程序。我想使用 erlang 客户端在 Redis 中存储对话的消息、From、To 和一些字段。我研究了 redis。列表数据类型最好存储聊天消息。但是我找不到任何使用列表实现的示例。有没有将聊天消息存储在列表中的示例。或者告诉我是否还有其他替代方法可以在 Redis 中存储聊天消息?

【问题讨论】:

    标签: erlang redis ejabberd


    【解决方案1】:

    好吧,您可以将 JSON 存储到列表中,但是如果您有用户可以删除消息的功能,那么您将必须找到列表中的确切位置,然后将其删除。如果我在你的位置,我会将其存储到 ZSET 中,例如:-

    redis 127.0.0.1:6379> ZADD chat 1 "{from:me, msg: hello}"
    (integer) 1
    redis 127.0.0.1:6379> ZADD chat 2 "{from:you, msg: hello}"
    (integer) 1
    redis 127.0.0.1:6379> ZADD chat 3 "{from:me, msg: how are you}"
    (integer) 1
    redis 127.0.0.1:6379> ZADD chat 4 "{from:you, msg: good, how about you}"
    (integer) 1
    redis 127.0.0.1:6379> ZADD chat 5 "{from:you, msg: are you there}"
    (integer) 1
    redis 127.0.0.1:6379> ZADD chat 6 "{from:me, msg: yes i am}"
    (integer) 1
    redis 127.0.0.1:6379> ZRANGE chat 0 -1
    1) "{from:me, msg: hello}"
    2) "{from:you, msg: hello}"
    3) "{from:me, msg: how are you}"
    4) "{from:you, msg: good, how about you}"
    5) "{from:you, msg: are you there}"
    6) "{from:me, msg: yes i am}"
    

    您可以使用时间戳代替 1、2、3(分数),因此使用 ZRANGE 您可以轻松获取对话。

    【讨论】:

    • 我用了你的答案。但一个小缺点是,如果我使用与 ZSET 中的前一个成员相同的成员,以前的成员将被新成员替换。参考:redis.io/commands/ZADD
    • 我明白你的意思,所以在这种情况下,你可以为每个 msg 添加带有消息的时间戳,这将被认为是不同的......
    • 谢谢你的回复,我会用的。
    【解决方案2】:

    http://gitweb.tideland.biz,您可以找到 ERRC,我的 Tideland Erlang/OTP Redis 客户端 (ERRC)。除了源代码之外,还有显示用法的单元测试。

    在您的具体任务中,我将使用 UUID 标识每条消息(您可以在我的 ERAS 库中找到它)并为消息使用哈希:

    HMSET msg::(UUID) timestamp ... from "foo" to "bar" text "Hello, World" ...
    

    这是一种事件溯源。然后,为了更好地导航,所有消息或发送者、接收者等的单独列表:

    LPUSH msgs::all (UUID) LPUSH msgs::from::foo (UUID)
    LPUSH msgs::to::bar (UUID)
    

    可以使用LRANGE key start stop 进行检索。在这里,您将获得消息的 UUID,然后您可以使用 HGETALL (UUID) 阅读这些 UUID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多