• 分布式缓存7大问题


    缓存:用于数据高速交换的介质

    1. 缓存失效:
      1. key过期,多key一起失效,批量写入缓存,一起到期
      2. 解决:批量写入时,预置过期时间添加随机时间,避免瞬时大量过期
    2. 缓存穿透:
      1. 大量查询不存在的key,特殊访问,前端-->db,db压力过载
      2. 解决:特殊缓存(cache中缓存一个默认值),BloomFilter过滤器(海量数据的与否判断),bit数组集合,对于一个key进行多个hash
    3. 缓存雪崩:
      1. 部分缓存节点不可用,导致整个缓存体系不可用(支持rehash/不支持rehash)
      2. 流量洪峰一致性hash,rehash,节点过载扩散,多节点宕机,
        1. 增加db读写开关,达到阀值,关闭开关,failfast
        2. 缓存副本,cache池miss后,读其他cache副本
        3. 缓存监控,达到阀值,故障转移
    4. db与缓存数据不一致:
      1. 更新db后写缓存失败,rehash节点多次上下线,带宽打满,机器宕机
      2. 解决:
        1. cache更新失败重试,失败key写入队列机
        2. 调短过期时间,db重新加载
        3. 不采用rehash漂移,采用缓存分层策略
    5. 数据并发竞争
      1. 多个进程/线程,并发访问过期数据,没有协调一起访问
      2. 解决:
        1. 全局锁,一个线程读取加锁,
        2. 缓存保持多个备份
    6. hot key
      1. 最近新闻,热数据,大量访问
      2. 解决:
        1. 提前评估hot key,分散处理  hot_key_1,hot_key_2......
        2. 缓存多副本
        3. 快速扩容
        4. 本地缓存
    7. big key
      1. key 的value过大
      2. 解决
        1. 设计缓存阀值,对value压缩
        2. 采用新结构
        3. 拆分多个小key,适当增加过期时间
  • 相关阅读:
    MySQL组提交(group commit)
    MySQL 热快问题解决
    Mysql 高可用集群PXC
    向量的点积(标量积、内积)
    BitmapData.threshold()方法
    Unity 自定义导入时切割Sprite
    匀变速直线运动的速度与位移的关系
    1.1.2 三角形余弦定理
    ccc切割刚体
    Unity 获取指定资源目录下的所有文件
  • 原文地址:https://www.cnblogs.com/gaoqing502/p/12929253.html
Copyright © 2020-2023  润新知