简单需求:直播的时候用户聊天的需求

后台实现:分为两个接口:发送消息接口和请求消息接口

主要点:redis的mget 的使用,

以及key值的设计

用直播期数【liveNum】作为当前期目前消息的总条数,使用incr在发送接口来累加总条数

每条消息的key:直播期数【liveNum】_当前消息第几条

实体类的属性

public class LiveChat {/*** 当前期的第几条数据*/private Integer id;/*** 直播期数*/private String liveNum;/*** 用户编号*/private String userNo;/*** 内容*/private String content;
}

②发送消息的代码

public boolean sendMessage(LiveChat liveChat) {//验证敏感词//非空验证//消息存到缓存String liveNum = liveChat.getLiveNum();ValueOperations valueOperations = redis.getValueOperations();//将当前消息累计到消息的总条数的Long increment = valueOperations.increment(liveNum, 1);StringBuilder builder = new StringBuilder(liveNum);builder.append("_");valueOperations.set(builder.append(String.valueOf(increment)).toString(), liveChat);return true;//消息存到消息队列}

③获取消息的接口 参数liveNum:直播期数;lastNum:上次请求时最新的条数

public List<LiveChat> getMeaasge(String liveNum,long lastNum) {ValueOperations valueOperations = redis.getValueOperations();//当前消息已经累计的条数Object object = valueOperations.get(liveNum);if(object!=null) {long current = Long.valueOf(object.toString());List<String> keys = new ArrayList<String>();for (long i = current; i > lastNum; i--) {StringBuilder builder = new StringBuilder(liveNum);builder.append("_");keys.add(builder.append(String.valueOf(i)).toString());}System.out.println("keys===="+keys);List<LiveChat> multiGet = valueOperations.multiGet(keys);System.out.println("multiGet ===="+multiGet);return multiGet;}System.out.println("当前期数的消息数为0");return null;

上面是主要的代码逻辑,添加上Controller之后,就可以调用接口来进行测试

用户发送消息调用sendMessage接口

比如

用户进入直播页面前端可以采用每隔2秒访问getMeaasge方式来获取信息,刚开始进去lastNum值为0,以后的值为上一次请求数据时最大的数据条数

(此时在发送两个聊天数据)

请求参数变成1

总结:①主要用了redis命令中的incr和mget

②发送接口的参数

{
    "liveNum":"20190812",
    "userNo":"201903140000",
    "content":"第3条消息"
}没有什么特殊的地方

③请求接口的参数liveNum,直播期数(我放在了请求头里面)和lastNum上一次请求最新的消息的id(这个为了前端方便取出来,也可以单独拿出来,而不是和返回的消息数据耦合在一起)

④消息key值得设计,为了使用multiget的,key设计成了 直播期数【liveNum】_当前消息第几条

另外可以加上消息队列来进行数据落地到mysql等数据库;如果用户中途进入,消息产生了很多,可以设置最多返回条数等等;根据场景设置消息过期时间

备注(业务逻辑经过正式线验证,虽然之前正式线用的是memcache实现的,但是逻辑类似;这个redis是单机模式,redis自带集群中用mget命令需要修改key的设计方式,让请求总命中同样的slot上)

redis 实现直播聊天(后台逻辑)相关推荐

  1. 微信直播聊天室单房间1500万在线的消息架构演进之路

    1.引言 随着直播和类直播场景在微信内的增长,这些业务对临时消息(在线状态时的实时消息)通道的需求日益增长,直播聊天室组件应运而生.直播聊天室组件是一个基于房间的临时消息信道,主要提供消息收发.在线状 ...

  2. 微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路

    本文由微信开发团队工程师" kellyliang"原创发表于"微信后台团队"公众号,收录时有修订和改动. 1.引言 随着直播和类直播场景在微信内的增长,这些业务 ...

  3. 直播聊天室的无限用户优化实践(六千字技术文)

    融云近期推出直播 SDK,两步即可实现视频直播能力.在第二步"开始直播"阶段,调用一个接口就能发布视频流,其他用户便可加入房间观看直播并在公屏发送弹幕与主播互动.移步[融云全球互联 ...

  4. 网易云信直播聊天室:无上限人数系统不卡顿,是不是鱼与熊掌不能兼得?

    1.直播聊天室的形式和应用场景 在一般人的理解中,直播聊天室应该就是直播画面旁边配一个聊天窗口,众多观看者在 里面发表自己的评论(如图1).Oh, NO!这样的场景是不是太Low啦!随着互联网技术和消 ...

  5. 【直播聊天室】Android开发源码

    基本概念 一.融云直播聊天室介绍 融云直播聊天室,是专门为视频直播业务提供的一个产品.主要特点是: 1.可以支持无人数上限的直播聊天室: 2.支持海量消息的并发,消息速度极快: 3.并可以方便的为直播 ...

  6. 【直播聊天室】特点、构成及解决方案简介

    为方便开发者了解和接入融云直播聊天室,本文将介绍融云直播聊天室功能特点.主要构成及常见功能的解决方案. 一.产品介绍 融云直播聊天室,是专门为视频直播业务提供的一个产品.主要特点是: 丰富的聊天室消息 ...

  7. 【干货】直播聊天室详细分解,让你一眼学会快速搭建!

    直播聊天室 为方便开发者了解和接入融云直播聊天室,本文将介绍融云直播聊天室功能特点.主要构成及常见功能的解决方案. 产品介绍 融云直播聊天室,是专门为视频直播业务提供的一个产品.主要特点是: 丰富的聊 ...

  8. ASP社群直播/聊天室/分销/系统源码

    简介: ASP社群直播/聊天室/分销/系统源码,群规等级升级的条件有3点:推广下级的人数.自身消费.直接缴费购买! 源码搭建流程: 1配置Inc.asp 2接微信公众账号 /a_Inc/Inc.asp ...

  9. 直播交友app开发,一对一视频直播聊天APP定制,语音直播交友软件源码

    直播类app近两年十分受欢迎,一对一视频直播交友,直播交友app目前主要是语音直播间陪玩,视频直播间打赏,pk,视频相亲,七人语音直播间,多人视频直播间,语音直播交友软件源码! 1,首页主播列表:包含 ...

最新文章

  1. Oracle创建表空间(转)
  2. keil4怎么移植其他人的程序_裸机程序如何驱动硬件?
  3. HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)
  4. SAP Spartacus BrowserPlatformLocation的初始化逻辑
  5. 原来信用卡肉这么肥,怪不得银行天天给你发短信叫你办理
  6. Oracle优化器:星型转换(Star Query Transformation )
  7. sqlserver把小数点后面多余的0去掉
  8. 编译ok6410linux内核,Linux3.6.7在OK6410平台的移植(二)编译配置linux3.6.7
  9. [VB]用记录集填充表格函数
  10. 基因组信息学参考习题
  11. Why you should not shrink your data files
  12. python爬取链家网_Python爬链家网租房信息
  13. ketchup 消息队列rabbitmq使用
  14. 教你快速缩小多个横屏短视频画面的两种方法
  15. OSI七层与TCP/IP五层网络架构详解
  16. 单位计算机网络管理员论文,计算机专业毕业论文(计算机网络管理软件的研究)教案.doc...
  17. 车牌识别EasyPR(3)——SVM模型判断车牌
  18. mingw+msys windows下配置
  19. Activexobject(“wscript.shell“)对象调用本地程序
  20. android单元测试demo,android单元测试AndroidTestCase

热门文章

  1. MSP430FR2433 LaunchPad板子energy trace技术测量电流电压
  2. 网页设计技巧:如何做好图片与文字的配合?
  3. 解决span标签自带空格问题
  4. UILabel的使用
  5. 频率分布直方图和累积频率分布图
  6. U盘安装win7系统 “详细” 教程
  7. self.canv.bookmarkPage(key, left=inch*0.5) ,为什么在reportlab中设置的缩进不生效?
  8. 乐视网暂停上市成定局:去年净资产为负30亿 债务难解
  9. Barsetto百胜图BAV02自助咖啡机——星巴克喝多了自助咖啡体验过吗?
  10. 春季人才市场外企就业竞争最激烈销售岗位需求量最大