目录 start

  1. 设计公告通知未读

    1. 1. 关联表存 已读或未读
    2. 2. Redis Set 存储 未读/已读
    3. 3. Redis bitmap 存储 未读/已读
    4. 4. 客户端存储已读

目录 end|2021-01-13 19:47|


设计公告通知未读

需求: 发布公告,用户维度的已读未读,有一键已读功能,首条未读需求

1. 关联表存 已读或未读

存储

  • 公告表
  • 公告和用户关联表

存已读

  1. 优点: 新增无需操作关联表,利于统计分析
  2. 缺点: 一键已读就需要未读的关联数据批量写入,数据量会持续增长,数据不够稀疏不便建立索引

存未读

  1. 优点: 新增无需操作关联表,利于统计分析
  2. 缺点:
    • 新增公告时,大量数据写入(为每一个用户新增),新注册用户需要补全部数据
    • 已读则删除数据(使用物理删除可能存在缺页问题,使用逻辑删除则数据持续增长)

2. Redis Set 存储 未读/已读

存储

  • 公告表
  • Redis存储 Set key为用户id,value为公告id

存已读

  1. 优点:

    • 新增公告无需操作关联关系
    • 用户查询公告未读状态,只需一次请求
  2. 缺点:
    • 全部已读需要查出所有公告id插入Redis Set
    • Redis占用的内存会持续增长

存未读

  1. 优点: 用户查询公告状态,只需一次请求,全部已读也只需一次请求
  2. 缺点: 新增公告时需要遍历请求所有用户插入公告id

3. Redis bitmap 存储 未读/已读

存储

  • 公告表
  • Redis存储 key为公告id bitmap存已读的用户id
  • 所有公告分页查询时,先得到Mysql分页第一页的公告id,然后遍历查询Redis已读未读状态
  • 未读公告的分页,需要查询所有的公告id(组织注册时间后的公告), 遍历请求redis得到 未读的公告id, 再进入Mysql 使用 in 进行分页
  1. 优点: 新增公告无需维护关联关系
  2. 缺点:
    • 分页查看所有未读的需求会随着公告的增多循环次数会增多
    • 全部已读需要遍历所有公告
    • 随着用户数增多单个key占用的内存持续增长

可以通过存储用户最后一次 所有公告已读 的时间戳,减少循环次数


4. 客户端存储已读

存储

  • 公告表
  • 客户端 Cookie 或者 LocalStorage 存储已读的公告id
  1. 优点: 服务端存储运算压力减轻
  2. 缺点:
    • 首条未读查询接口需要传入已读的id列表,公告多的时候会导致SQL超长
    • 无法多端同步状态(其实也可以做,定时同步已读id列表),全部已读需要写入所有公告id到本地

公告或通知的未读 设计(MySQL Redis)相关推荐

  1. 面试题:群聊消息的已读未读设计

    点击上方"Java之间",选择"置顶或者星标" 你关注的就是我关心的! 作者:小猿学习笔记 一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微 ...

  2. 设计已读和未读的公告

    需求 需求是这样的,需要在小程序端展示公告,可根据管理后台的排序显示公告列表,如果当前用户未阅读公告,则有未读的红点提示. 想法 提供管理后台的CRUD接口,提供小程序端公告列表接口且接口数据结构中包 ...

  3. app里未读消息已读、未读是怎么设计的?

    也不知道大家目前都用的java编程软件有哪些,毕竟在应用程序中,未读和已读消息的设计取决于应用程序的需求和目标.下面是一些常见的设计模式: 一.简单的未读/已读标记 简单的未读/已读标记:这是最常见的 ...

  4. 面试官:群聊消息的已读未读功能,你来设计一个?

    欢迎关注方志朋的博客,回复"666"获面试宝典 一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微信.钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当 ...

  5. socket未读消息 如何设计_如何设计IM系统的消息架构?

    导读:IM全称是『Instant Messaging』,中文名是即时通讯.在高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,像"钉钉"以IM为核心功能的产品.还有一些非 ...

  6. Android 系统(257)---Launcher显示未读通知的数量

    Launcher显示未读通知的数量 请修改: /vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher ...

  7. 管理员发送系统公告,每个用户登陆可查看自己的已读和未读状态的公告

    文章目录 准备工作 数据库表 Qo部分 实体类部分 显示公告的控制器部分(list) 查询公告的业务层方法 点击查看按钮,则将未读设为已读 所对应的控制器 所用到的sql语句 如何新增公告,并在中间表 ...

  8. PHP,mysql会话列表获取聊天记录最后一条以及未读消息条数

    需求 项目中用到即时消息,需要查询会话列表 mysql查询会话列表,每条记录包含以下字段: 未读消息条数, 最后一条消息内容 发送时间 朋友id 朋友昵称 sql  : select t.*,m.ni ...

  9. 大公司面试考细节,设计群聊消息的已读未读功能你说说怎么做?

    一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微信.钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的 ...

最新文章

  1. 代码UITableView点击cell跳转
  2. 恢复【谷歌浏览器开发者工具】默认设置(亲测)
  3. C++之vector容器初学(二)——插入和删除
  4. 带线的无限级下拉树列表-完整示例篇
  5. react native项目改名(仅针对android)
  6. java正则 找出数字_Java使用正则表达式实现找出数字功能示例
  7. Java是否为回文_java语言判断一个数字是否为回文数字
  8. 知名设计师晒iPad mini 6渲染图:取消Home键 依旧不支持120Hz刷新率
  9. 新型监控告警工具prometheus(普罗米修斯)入门使用(附视频讲解)
  10. python库声纹_针对亿级大规模声纹库检索,有哪些简洁、高效的算法?
  11. 【MyBatis笔记】12-多对一添加操作(添加新客户及对应的新订单)
  12. seleuium 禁止检测_如何突破网站对selenium的屏蔽
  13. 建站基础知识之CSS 究竟什么来头?
  14. notepad++自动补全括号
  15. 第一部分 1.2 定义OC的类和创建OC的对象
  16. Java Socket框架Apache MINA:实现Socket服务器端
  17. 韩立刚计算机网络——第五章:应用层
  18. AI研习丨专题:面向共享出行的群体智能技术与应用
  19. BZOJ1002 FJOI2007 轮状病毒 【基尔霍夫矩阵+高精度】
  20. elementui的使用问题

热门文章

  1. 相机标定中的相机焦距
  2. 论文写作:如何选研究题目?
  3. 黑白照片转换成彩色照片(无需任何编程)
  4. 拉了300M的网,下载速度为啥还是这么慢?计算机基础(五)之网络层完结
  5. 督办管理系统——让企业工作落实到位
  6. 中国皇帝顺序(全)---
  7. 微型计算机从外观上看可以分为,冯.诺依曼计算机 1.3 计算机系统的组成 计算机系统概述 EDVAC的3个特点:...
  8. jbox2d android教程,Jbox2d实践应用
  9. ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)(转)
  10. HillTop (LocalScore) 算法