zoukankan      html  css  js  c++  java
  • 分布式缓存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,适当增加过期时间
  • 相关阅读:
    asp.net与javascript问题
    动态加载用户控件
    ASP.NET中实现模版的动态加载
    一个简单的购物车
    给图片加上水印效果
    用存储过程自定义分页
    上传图片及显示图片
    sql server图片的保存和读取
    Legato Single Server SertupFor RMAN
    确定裸设备上控制文件的大小
  • 原文地址:https://www.cnblogs.com/gaoqing502/p/12929253.html
Copyright © 2011-2022 走看看