栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis消息拉取

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis消息拉取

两个或多个客户端在互相发送和接收消息的时候,通常会使用以下两种方法来传递消息。第一种方法被称为消息推送(push messaging),也就是由发送者来确保所有接收者已经成功接收到了消息。Redis内置了用于进行消息推送的PUSLISH命令和SUBSCRIBE命令,尽管消息推送非常有用,但是当客户端因为某些原因而没办法一直保持在线的时候,采用这一消息传递方法的程序就会出现各种各样的问题。第二种方法被称为消息拉取(pull messaging),这种方法要求接收者自己去获取在某种邮箱(mailbox)里面的消息。 单个接收者

只有单个接收者的消息传递操作和前面介绍过的先进先出的队列有很多共通之处,每条消息都只会被发送至一个客户端,为了以这种方法来处理消息,我们将为每个移动客户端使用一个列表结构,发送者会把消息放到接收者的列表里面,而接收者客户端则通过发送请求来获取最新的消息,通过使用HTTP 1.1协议的流水线请求特性或者新型的Web套接字功能,移动客户端既可以在一次请求里面获取所有未读消息,又可以每次请求只获取一条未读消息,还可以通过使用LTRIM命令移除列表的前10个元素来获取最新的10条未读消息。

多个接收者

多个接收者的情况类似于聊天群组,即群组内的人发消息,其他人都可以收到。我们可以使用以下几个数据结构存储所需数据,以便实现我们的所需的功能:

  1. STRING: 群组的消息自增id,INCR实现id自增并获取;
  2. ZSET: 存储该群组中的每一条信息,分值为当前群组内的消息自增id,ZRANGEBYSCORE实现获得未获取的消息;
  3. ZSET: 存储该群组中每个人获得的最新一条消息的id ,所有消息均未获取时为0,ZCARD实现获取群组人数;ZRANGE经过处理后,可实现哪些消息成功被哪些人接收了的功能;ZRANGE:获取id最小数据,可实现删除被所有人获取过的消息的功能;
  4. ZSET: 存储一个人所有群组获得的最新一条消息的id ,离开群组时自动删除,加入群组时初始化为0,ZCARD获取所在的群组个数;ZRANGE经过处理后,可实现批量拉取所有群组的未获取的消息的功能。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583921.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号