zoukankan      html  css  js  c++  java
  • 持久化数据设计 (重点)

    # 用户搜索历史列表
    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中, 方便排序(点赞数/评论数/文章数排行)
  • 相关阅读:
    Linux
    Linux
    JavaScript
    JavaScript
    Linux
    不可不说的Java“锁”事
    RabbitMQ公共配置
    求一个数字的补码
    项目中Controller的全局异常处理类
    如何较方便给上百张数据库表添加表字段
  • 原文地址:https://www.cnblogs.com/oklizz/p/11420241.html
Copyright © 2011-2022 走看看