数据类型-案例:微信接收消息顺序控制| 学习笔记

简介: 快速学习数据类型-案例:微信接收消息顺序控制

开发者学堂课程【Redis 入门到精通(基础篇)数据类型-案例:微信接收消息顺序控制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/764/detail/13396


数据类型-案例:微信接收消息顺序控制

 

内容介绍

一、数据类型实践案例

二、Tips17

三、总结

 

一、数据类型实践案例

业务场景

使用微信的过程中,当微信接收消息后,会默认将最近接收的消息置顶,当多个好友及关注的订阅号同时发送消息时,该排序会不停的进行交替。同时还可以将重要的会话设置为置顶。

一旦用户离线后,再次打开微信时,消息该按照什么样的顺序显示?

接下来再看一个有关微信回话顺序管理的应用,在没有看消息的情况下,收到的消息如何展示排列,如何去实现,这就是我们要做的案例环境。我们想到的就是需要去排序,时间次序,可以考虑list,如何进行一个分析。

业务分析

image.png

我们进行一个模拟,我们的手机是100,屏幕闪烁意味着接收信息,每一个用户都有置顶信息,这个集合就是为了放置顶用户,我们给两个list,如果300发送消息,我们进行记录是置顶用户发的还是普通用户发的,首先与置顶的做一个比较,判断是否为置顶消息,然后就放在普通消息里面,然后400发送消息,判断是否是置顶用户,判断是,则放入置顶list里面,然后200发送消息,检查置顶,然后放入普通list,此时是一次消息,然后200再次发送消息,判断是否置顶,然后检查普通list是否存在200,然后如果存在就删掉再加入,可能认为是多余的,但是这是对未读消息的一次更新,如果是有之前发的,那么就会提到前面变成最新的消息,300发送消息,判断是否置顶,然后放入普通list,做一次检查,删掉之前的,然后重新进入,最新消息300就在最上面。

list 有一个从右边添加有顺序的特征,这个模型就是我们所见到的消息提醒,当300再次发送时,删除再重新添加,然后我们发现我们的用户界面上面,300到了最上面。

解决方案
●依赖list的数据具有顺序的特征对消息进行管理,将list结构作为栈使用
●对置顶与普通会话分别创建独立的list分别管理
●当某个list中接收到用户消息后,将消息发送方的id从list的一侧咖入list(此处设定左侧)
●多个相同id发出的消息反复入栈会出现问题,在入栈之前无论是否具有当前id对应的消息,先删除对应id

●推送消息时先推送置顶会话list,再推送普通会话list,推送完成的list清除所有数据
●消息的数量,也就是微信用户对话数量采用计数器的思想另行记录,伴随list操作同步更新

这次我们就是利用了list顺序的特征,按栈模型使用,队列也可以用作栈,只需要保证操作在一端就可以,建立了两个list分类管理,然后收到消息选择一侧加入,新消息删掉再重新加入,set模型可以过滤掉重复的,set没有顺序,无法使用set,那么使用发送消息的次数定义也是不可以的,发消息的多少不能决定消息的时间,但是如果按照消息最后一条的时间排列,这个是可以的,当推送消息时,置顶最上面,然后就是按时间排列的次序,这样列表清空,消息的顺序也就展示出来了,这个地方没有收到几条消息的记录,那么我们就需要列一个string或者hash,可以滚动自增的就可以实现,做滚动计数把list的同步计数加上就OK。

接下来进行实现,lrem 100 1 200,然后lpush 100 200,lrem 100 1 300,然后lpush 100 300,lrem 100 1 400,lpush 100 400,lrem 100 1 200,lpush 100 200,lrem 100 1 300, lpush 100 300,消息显示的顺序就是,lrange 100 0 -1,打印出来就是我们的顺序,如果要显示用户,发了几条消息,那么就要我们加一个滚动计数就可以了。


二、Tips17

●redis 应用于基于时间顺序的数据操作,而不关注具体时间


三、总结

最后进行一个总结,我们学了5种数据类型,分别对每一个数据类型基本操作和扩展操作进行了讲解,很多操作并不是仅仅讲的这一些,还有很多实用性不是很强的,相对操作没有这些实用,还有两个数据类型案例。

相关文章
|
7天前
|
API 开发者
微信native支付对接案例详解
本文详细介绍了微信Native支付的对接流程,包括效果展示、产品介绍、接入前准备、开发指引、API列表、支付通知等,并强调了只有通过微信认证的服务号才能对接微信支付。每年需支付300元认证费用。
24 3
|
2月前
|
缓存 数据可视化 Serverless
微信小游戏 案例一 像素飞机
微信小游戏 案例一 像素飞机
21 2
|
2月前
|
开发框架 前端开发 JavaScript
微信小游戏案例三 抓星星
微信小游戏案例三 抓星星
96 0
微信小游戏案例三 抓星星
|
2月前
|
JavaScript 小程序 前端开发
微信小程序 案例二 飞机大战
微信小程序 案例二 飞机大战
67 0
微信小程序 案例二 飞机大战
|
5月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付16----创建案例项目-引入Swagger
支付系统----微信支付16----创建案例项目-引入Swagger
支付系统---微信支付14----创建案例项目---介绍,第二步引入Swagger,接口文档和测试页面生成工具,定义统一结果的目的是让结果变得更加规范,以上就是谷粒项目的几个过程
支付系统---微信支付14----创建案例项目---介绍,第二步引入Swagger,接口文档和测试页面生成工具,定义统一结果的目的是让结果变得更加规范,以上就是谷粒项目的几个过程
|
5月前
|
小程序
【微信小程序】实战案例 -- 向订阅用户发送消息(范例:报名提醒)
【微信小程序】实战案例 -- 向订阅用户发送消息(范例:报名提醒)
292 0
|
7月前
|
XML 人工智能 数据安全/隐私保护
【Python+微信】【企业微信开发入坑指北】1. 数据链路打通:接收用户消息处理并回复
【Python+微信】【企业微信开发入坑指北】1. 数据链路打通:接收用户消息处理并回复
113 0
|
7月前
|
JSON 小程序 前端开发
【微信小程序】-- 案例 - 自定义 tabBar(四十六)
【微信小程序】-- 案例 - 自定义 tabBar(四十六)