如何使用Erlang客户端在Redis中存储聊天消息?

时间:2014-02-13 04:59:01

标签: erlang redis ejabberd

我正在使用ejabberd作为服务器安装android聊天应用程序,Redis作为存储聊天消息的数据库。我想使用erlang client存储会话的消息,From,To和Redis中的一些字段。我研究了redis。列表数据类型最好存储聊天的消息。但是我找不到任何使用List实现的例子。有任何例子可以在列表中存储聊天消息。或者告诉我是否还有其他备用存储Redis中的聊天消息?

2 个答案:

答案 0 :(得分:2)

好吧,你可以将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可以轻松获取对话。

答案 1 :(得分:1)

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)读取消息。