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
如何使用Erlang客户端在Redis中存储聊天信息?_Erlang_Redis_Ejabberd - Fatal编程技术网

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

如何使用Erlang客户端在Redis中存储聊天信息?,erlang,redis,ejabberd,Erlang,Redis,Ejabberd,我在android聊天应用程序中工作,使用ejabberd作为服务器,Redis作为存储聊天信息的数据库。我想使用erlang客户端在Redis中存储对话信息、发件人、收件人和一些字段。我学习了Redis。列表数据类型最适合存储聊天信息。但我找不到任何使用列表实现的示例。是否有任何示例可以在列表中存储聊天信息。或者告诉我在Redis中是否还有其他存储聊天信息的方法 好吧,您可以将JSON存储到列表中,但如果您有一个功能,用户可以删除消息,那么您必须找到列表中的确切位置,然后将其删除。如果我在你家

我在android聊天应用程序中工作,使用ejabberd作为服务器,Redis作为存储聊天信息的数据库。我想使用erlang客户端在Redis中存储对话信息、发件人、收件人和一些字段。我学习了Redis。列表数据类型最适合存储聊天信息。但我找不到任何使用列表实现的示例。是否有任何示例可以在列表中存储聊天信息。或者告诉我在Redis中是否还有其他存储聊天信息的方法

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

在上,您可以找到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)

阅读这些消息。我使用了您的答案。但一个小缺点是,如果我使用与ZSET中的前一个相同的成员,则前一个成员将被新成员替换。我理解你的意思,所以在这种情况下,你可以添加时间戳的消息,每个MSG将被认为是不同的…谢谢你的答复。我会用它。