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