公告或通知的未读 设计(MySQL Redis)
目录 start
- 设计公告通知未读
- 1. 关联表存 已读或未读
- 2. Redis Set 存储 未读/已读
- 3. Redis bitmap 存储 未读/已读
- 4. 客户端存储已读
目录 end|2021-01-13 19:47|
设计公告通知未读
需求: 发布公告,用户维度的已读未读,有一键已读功能,首条未读需求
1. 关联表存 已读或未读
存储
- 公告表
- 公告和用户关联表
存已读
- 优点: 新增无需操作关联表,利于统计分析
- 缺点: 一键已读就需要未读的关联数据批量写入,数据量会持续增长,数据不够稀疏不便建立索引
存未读
- 优点: 新增无需操作关联表,利于统计分析
- 缺点:
- 新增公告时,大量数据写入(为每一个用户新增),新注册用户需要补全部数据
- 已读则删除数据(使用物理删除可能存在缺页问题,使用逻辑删除则数据持续增长)
2. Redis Set 存储 未读/已读
存储
- 公告表
- Redis存储 Set key为用户id,value为公告id
存已读
- 优点:
- 新增公告无需操作关联关系
- 用户查询公告未读状态,只需一次请求
- 缺点:
- 全部已读需要查出所有公告id插入Redis Set
- Redis占用的内存会持续增长
存未读
- 优点: 用户查询公告状态,只需一次请求,全部已读也只需一次请求
- 缺点: 新增公告时需要遍历请求所有用户插入公告id
3. Redis bitmap 存储 未读/已读
存储
- 公告表
- Redis存储 key为公告id bitmap存已读的用户id
- 所有公告分页查询时,先得到Mysql分页第一页的公告id,然后遍历查询Redis已读未读状态
- 未读公告的分页,需要查询所有的公告id(组织注册时间后的公告), 遍历请求redis得到 未读的公告id, 再进入Mysql 使用 in 进行分页
- 优点: 新增公告无需维护关联关系
- 缺点:
- 分页查看所有未读的需求会随着公告的增多循环次数会增多
- 全部已读需要遍历所有公告
- 随着用户数增多单个key占用的内存持续增长
可以通过存储用户最后一次 所有公告已读 的时间戳,减少循环次数
4. 客户端存储已读
存储
- 公告表
- 客户端 Cookie 或者 LocalStorage 存储已读的公告id
- 优点: 服务端存储运算压力减轻
- 缺点:
- 首条未读查询接口需要传入已读的id列表,公告多的时候会导致SQL超长
- 无法多端同步状态(其实也可以做,定时同步已读id列表),全部已读需要写入所有公告id到本地
公告或通知的未读 设计(MySQL Redis)相关推荐
- 面试题:群聊消息的已读未读设计
点击上方"Java之间",选择"置顶或者星标" 你关注的就是我关心的! 作者:小猿学习笔记 一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微 ...
- 设计已读和未读的公告
需求 需求是这样的,需要在小程序端展示公告,可根据管理后台的排序显示公告列表,如果当前用户未阅读公告,则有未读的红点提示. 想法 提供管理后台的CRUD接口,提供小程序端公告列表接口且接口数据结构中包 ...
- app里未读消息已读、未读是怎么设计的?
也不知道大家目前都用的java编程软件有哪些,毕竟在应用程序中,未读和已读消息的设计取决于应用程序的需求和目标.下面是一些常见的设计模式: 一.简单的未读/已读标记 简单的未读/已读标记:这是最常见的 ...
- 面试官:群聊消息的已读未读功能,你来设计一个?
欢迎关注方志朋的博客,回复"666"获面试宝典 一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微信.钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当 ...
- socket未读消息 如何设计_如何设计IM系统的消息架构?
导读:IM全称是『Instant Messaging』,中文名是即时通讯.在高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,像"钉钉"以IM为核心功能的产品.还有一些非 ...
- Android 系统(257)---Launcher显示未读通知的数量
Launcher显示未读通知的数量 请修改: /vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher ...
- 管理员发送系统公告,每个用户登陆可查看自己的已读和未读状态的公告
文章目录 准备工作 数据库表 Qo部分 实体类部分 显示公告的控制器部分(list) 查询公告的业务层方法 点击查看按钮,则将未读设为已读 所对应的控制器 所用到的sql语句 如何新增公告,并在中间表 ...
- PHP,mysql会话列表获取聊天记录最后一条以及未读消息条数
需求 项目中用到即时消息,需要查询会话列表 mysql查询会话列表,每条记录包含以下字段: 未读消息条数, 最后一条消息内容 发送时间 朋友id 朋友昵称 sql : select t.*,m.ni ...
- 大公司面试考细节,设计群聊消息的已读未读功能你说说怎么做?
一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微信.钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的 ...
最新文章
- 代码UITableView点击cell跳转
- 恢复【谷歌浏览器开发者工具】默认设置(亲测)
- C++之vector容器初学(二)——插入和删除
- 带线的无限级下拉树列表-完整示例篇
- react native项目改名(仅针对android)
- java正则 找出数字_Java使用正则表达式实现找出数字功能示例
- Java是否为回文_java语言判断一个数字是否为回文数字
- 知名设计师晒iPad mini 6渲染图:取消Home键 依旧不支持120Hz刷新率
- 新型监控告警工具prometheus(普罗米修斯)入门使用(附视频讲解)
- python库声纹_针对亿级大规模声纹库检索,有哪些简洁、高效的算法?
- 【MyBatis笔记】12-多对一添加操作(添加新客户及对应的新订单)
- seleuium 禁止检测_如何突破网站对selenium的屏蔽
- 建站基础知识之CSS 究竟什么来头?
- notepad++自动补全括号
- 第一部分 1.2 定义OC的类和创建OC的对象
- Java Socket框架Apache MINA:实现Socket服务器端
- 韩立刚计算机网络——第五章:应用层
- AI研习丨专题:面向共享出行的群体智能技术与应用
- BZOJ1002 FJOI2007 轮状病毒 【基尔霍夫矩阵+高精度】
- elementui的使用问题
热门文章
- 相机标定中的相机焦距
- 论文写作:如何选研究题目?
- 黑白照片转换成彩色照片(无需任何编程)
- 拉了300M的网,下载速度为啥还是这么慢?计算机基础(五)之网络层完结
- 督办管理系统——让企业工作落实到位
- 中国皇帝顺序(全)---
- 微型计算机从外观上看可以分为,冯.诺依曼计算机 1.3 计算机系统的组成 计算机系统概述 EDVAC的3个特点:...
- jbox2d android教程,Jbox2d实践应用
- ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)(转)
- HillTop (LocalScore) 算法