Redis实现多人多聊天室功能
2016-11-14 15:23
288 查看
本文为大家分享了Redis支持多人多聊天室功能的设计代码,供大家参考,具体内容如下
设计原理
左边的一个数据域,代表两个聊天室,聊天室id分别是827,729
在聊天室827里,有2个人,分别是jason22,jeff24他们分别已经阅读过聊天室内的id为5和6的消息
右边的一个数据域,代表了用户在不同的聊天室,jason22参与了827与729聊天室,在这两个聊天室里,他分别阅读到了id为5和id为10的消息
另外827聊天室内id为5的消息与729聊天室内id为5的消息不一样。
同时还有三个域
msgs:chatid
这是一个zset,有序集合,member是消息体,score是消息id
代表的是某个聊天室内已经发出的消息
另外 这里面存的是有用的消息,已经被所有人都阅读的消息就会被删除
ids:chatid
是一个String型的数据,里面放的是最新的消息的编号(发消息时,自增这个字段,即可获得最新的值)
ids:chat:
是一个String型的数据,里面放的是最新的聊天室的编号(创建聊天室时,自增这个字段)
代码
OK 开始看代码
?
发消息现在就OK了,剩下的就是用户去拉取未读的消息了。这个比较麻烦,恩,相当的麻烦
?
OK,咱们看看测试代码:
?
搞定了,大家不妨把代码复制一份,自己看看
下面的是测试的结果
test before
----- testMultiRecipientMessaging -----
Let's create a new chat session with some recipients...
Now let's send a few messages...
看看消息库
{"sender":"joe","id":1,"message":"message 1","ts":1477276890018} -- 1.0
{"sender":"joe","id":2,"message":"message 2","ts":1477276890113} -- 2.0
{"sender":"joe","id":3,"message":"message 3","ts":1477276890115} -- 3.0
{"sender":"joe","id":4,"message":"message 4","ts":1477276890116} -- 4.0
And let's get the messages that are waiting for jeff and jenny...
要删除的 tuple:jenny--0.0
要删除的 tuple:joe--0.0
要删除的 tuple:jeff--4.0
They are the same? true
Those messages are:
chatId: 1
messages:
{sender=joe, id=1, message=message 1, ts=1.477276890018E12}
{sender=joe, id=2, message=message 2, ts=1.477276890113E12}
{sender=joe, id=3, message=message 3, ts=1.477276890115E12}
{sender=joe, id=4, message=message 4, ts=1.477276890116E12}
看看还有没
设计原理
左边的一个数据域,代表两个聊天室,聊天室id分别是827,729
在聊天室827里,有2个人,分别是jason22,jeff24他们分别已经阅读过聊天室内的id为5和6的消息
右边的一个数据域,代表了用户在不同的聊天室,jason22参与了827与729聊天室,在这两个聊天室里,他分别阅读到了id为5和id为10的消息
另外827聊天室内id为5的消息与729聊天室内id为5的消息不一样。
同时还有三个域
msgs:chatid
这是一个zset,有序集合,member是消息体,score是消息id
代表的是某个聊天室内已经发出的消息
另外 这里面存的是有用的消息,已经被所有人都阅读的消息就会被删除
ids:chatid
是一个String型的数据,里面放的是最新的消息的编号(发消息时,自增这个字段,即可获得最新的值)
ids:chat:
是一个String型的数据,里面放的是最新的聊天室的编号(创建聊天室时,自增这个字段)
代码
OK 开始看代码
?
?
?
下面的是测试的结果
test before
----- testMultiRecipientMessaging -----
Let's create a new chat session with some recipients...
Now let's send a few messages...
看看消息库
{"sender":"joe","id":1,"message":"message 1","ts":1477276890018} -- 1.0
{"sender":"joe","id":2,"message":"message 2","ts":1477276890113} -- 2.0
{"sender":"joe","id":3,"message":"message 3","ts":1477276890115} -- 3.0
{"sender":"joe","id":4,"message":"message 4","ts":1477276890116} -- 4.0
And let's get the messages that are waiting for jeff and jenny...
要删除的 tuple:jenny--0.0
要删除的 tuple:joe--0.0
要删除的 tuple:jeff--4.0
They are the same? true
Those messages are:
chatId: 1
messages:
{sender=joe, id=1, message=message 1, ts=1.477276890018E12}
{sender=joe, id=2, message=message 2, ts=1.477276890113E12}
{sender=joe, id=3, message=message 3, ts=1.477276890115E12}
{sender=joe, id=4, message=message 4, ts=1.477276890116E12}
看看还有没
相关文章推荐
- Redis实现多人多聊天室功能
- C++和flex实现聊天室功能
- 聊天室功能实现
- 通过Keepalived实现Redis Failover自动故障切换功能
- java 聊天室之 传送图片文字等功能的实现
- 利用redis分布式锁的功能来实现定时器的分布式
- 在同一个页面中实现登陆验证进入聊天室功能
- 让redis也能实现数据库才有的増删改、查询过滤功能
- 实现多台服务器上Redis的数据主从复制的功能
- 代码服务器端Tornado实现聊天室功能(websocket)
- 通过Keepalived实现Redis Failover自动故障切换功能[实践分享] =转载
- C++和flex实现聊天室功能
- 基于php&mysql实现聊天室功能的代码实例分享
- 基于php&mysql实现聊天室功能的代码实例分享
- 使用python和redis实现实时聊天室
- Qt实现局域网聊天室:类似QQ抖动窗口功能的实现
- TCPserver Tcpclient 怎么实现聊天室一起聊天的功能呢?
- Redis实现MongoDB的getlasterror功能
- 消息队列实现聊天室功能
- 用Redis实现Session功能