有没有一种方法可以将礼节与使用redis的聊天信息联系起来?

4jb9z9bj  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(345)

我正在尝试建立一个聊天室,我想存储额外的信息,如:昵称,时间和头像,然后将它们关联到一条消息。
我可能会使用“:”来分隔某些属性,但这听起来不像是一种优雅的方式!

$list = "message_history";
$message = $data['nickname'] . ':' . $data['message'];
Redis::lpush($list, $message);

使用redis有没有一种优雅的方法?

gr8qqesn

gr8qqesn1#

既然你在评论中提到了,你会有一个单独的聊天室, redis lists 为聊天室工作。
元素将是 sorted in insertion order (适合聊天)
单个列表支持超过40亿个元素(可能已经足够了)
你可以用 LPUSH / RPUSH 添加新消息,并且由于redis列表是用 linked lists ,在列表的开头或结尾添加消息是相同的,o(1),这很好。
使用lrange对消息进行分页 start 以及 end . 一次收到所有的信息是没有好处的,你可能会有内存,网络相关的问题,小心使用 LRANGE 对于两边偏移量大的列表。
如果要在列表中只保留最后n条消息(取决于您的业务规则),则可以使用 LTRIM .
我不认为你需要一个公共聊天室的特定信息,因为 LINDEX 是o(n)(除了第一个和最后一个)。如果你需要,仔细考虑一下。
这是官方redis文档中lrange的基准;
lrange(前100个元素):每秒42123.00个请求
lrange(前300个元素):每秒15015.02个请求
lrange(前450个元素):每秒10159.50个请求
lrange(前600个元素):每秒7548.31个请求
编辑:
在你的情况下,你可以推动元素 username:avatar:time:message format 并在需要显示时对其进行解析。考虑将用户保存在哈希结构中,并将所有与用户相关的属性保存在哈希中,并在中创建消息 userId:time:message 格式。两种选择都不错。

bxgwgixi

bxgwgixi2#

最后我用了一个hash'hset'。通过给每条消息一个id并将它们保存在一个单独的列表中,我可以通过该列表访问所有消息。

相关问题