您的位置:首页 > 数据库 > Redis

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}

看看还有没
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: