持久化数据设计 (重点)

# 用户搜索历史列表
user:<用户id>:search_history zset  [{value:关键词, score:搜索时间}, {}, {}]
# 用户阅读历史列表
user:<用户id>:read_history zset  [{value:文章id, score:阅读时间}, {}, {}] 

# 所有用户的作品数量
# user:<用户id>:art_count  string  13  incr/decr
user:all:art_count   zset  [{value: 用户id, score:作品数量}, {}, ]
# 所有文章的点赞数量
article:all:like_count  zset [{value: 文章id, score: 点赞数}, {}, {}]
# zincrby 对分数+n    zscore 获取分数   zrevrange 倒序排列
  • 阅读历史/搜索历史 更新比较频繁
    • 不在mysql中进行保存, 直接持久化到redis中, 丢失了也不太重要
  • 点赞数/回复数 更新频繁
    • 如果保存到mysql中, 就会大量的并发更新操作, 出现阻塞的情况 -> 取消mysql的冗余字段, 直接在redis中进行持久化
    • 如果保存在redis的数据对象中, 需要经常进行序列化转换, 效率太低, 所以将统计数量从数据对象中提取出来单独存储, 这样也能减少持久化的数据总量
    • 为了后续排序考虑, 将各类统计数量保存到对应的zset中, 方便排序(点赞数/评论数/文章数排行)
原文地址:https://www.cnblogs.com/oklizz/p/11420241.html