控制跳转 xml class asynchronous dynamic replace syntax threejs msbuild ionic framework 管理后台模板 河南普通话报名 pmp视频 js鼠标离开事件 oracle修改字段默认值 mysql卸载重装 nfc卡片 mysql自然连接 python正则表达式 python解析json数据 python获取数据类型 python安装 java字符串 java中的多态 java时间戳转时间 java的for循环 java时间戳转日期 linux如何安装 行业软件下载 脚本软件 labview宝典 图片生成网址 微信彩色字 list删除指定元素 语音分析软件 联想小新键盘灯怎么开 vue引入第三方js movavi 死从天降成就 lol无法连接服务器
当前位置: 首页 > 学习教程  > 编程语言

使用 MySQL Redis 设计公告或通知未读

2021/1/13 19:35:13 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

目录 start 设计公告通知未读 1. 关联表存 已读或未读2. Redis Set 存储 未读3. Redis bitmap 存储已读/未读4. 客户端存储已读 目录 end|2021-01-13 19:29| 设计公告通知未读 需求: 发布公告,用户维度的已读未读,有一键已读功能&#xff…

目录 start

  1. 设计公告通知未读
    1. 1. 关联表存 已读或未读
    2. 2. Redis Set 存储 未读
    3. 3. Redis bitmap 存储已读/未读
    4. 4. 客户端存储已读

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


设计公告通知未读

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

1. 关联表存 已读或未读

存储

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

存已读

  • 新增无需操作关联表,一键已读就需要未读的关联数据批量写入,数据量会持续增长

存未读

  • 新增公告时,大量数据写入(为每一个用户新增),新注册用户需要补全部数据
  • 已读则删除数据(使用物理删除可能存在缺页问题,使用逻辑删除则数据持续增长)

2. Redis Set 存储 未读

存储

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

如果存已读的话,占用的内存会持续增长

  • 缺点: 新增公告时,需要遍历请求所有用户的key插入公告id
  • 优点: 读取只需一次请求,全部已读也只需一次请求

3. Redis bitmap 存储已读/未读

存储

  • 公告表

  • Redis存储 key为公告id bitmap存已读的用户id

  • 所有公告分页查询时,先得到Mysql分页第一页的公告id,然后遍历查询Redis已读未读状态

  • 未读公告的分页,需要查询所有的公告id(组织注册时间后的公告), 遍历请求redis得到 未读的公告id, 再进入Mysql 使用 in 进行分页

  • 优点: 新增公告无需更新Redis这个关联关系

  • 缺点: 登录后弹窗这个需求会随着公告的增多循环次数会增多,全部已读需要遍历所有公告,随着用户数增多单个key占用的内存持续增长


4. 客户端存储已读

存储

  • 公告表

  • 客户端 Cookie 或者 LocalStorage 存储已读的公告id

  • 优点: 服务端存储运算压力减轻

  • 缺点: 首条未读查询接口需要传入已读的id列表,无法多端同步状态(其实也可以做,定时同步已读id列表),全部已读需要写入所有公告id到本地


本文链接: http://www.dtmao.cc/news_show_600109.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?