认识缓存

缓存更新策略

缓存穿透

缓存击穿

缓存雪崩

 

 

  

认识缓存

缓存的作用

1,降低后端负载 2,提高服务于相应速度

缓存的成本

1.开发成本  2,运维成本 3,一致性成本

 

缓存更新策略

三种策略

1,内存淘汰:redis自带的缓存淘汰机制

2,过期淘汰:利用expire命令给数据设置过期时间

3,主动更新:主动完成数据库与缓存的同时更新

策略选择

低一致性需求:选择内存淘汰或过期淘汰

高一致性需求:主动更新

 

缓存穿透

产生原因

客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远都不会生效,请求都会打到数据库

解决方案

1,缓存空对象

  思路:对于不存在的数据也在redis建立缓存,值为空,并设置一个较短的TTL时间

  优点:实现简单,维护方便

  缺点:额外的内存消耗,短期的数据不一致问题

2,布隆过滤

  思路:利用布隆过滤算法,在请求进入redis之前先判断是否存在,如果不存在直接拒绝请求

  优点:内存占用少

  缺点:实现复杂,存在误判的可能性

3,其他

  做好数据的基础格式校验,加强用户权限校验,做好热点参数的限流

 

缓存雪崩

产生原因:在同一时段大量的缓存key同时失效或者redis服务宕机,导致大量请求到达数据库,带来巨大压力

解决方案:

  给不同的key添加随机的TTL,

  利用redis集群提高可用性,

  给缓存业务添加降级限流策略,

  给业务添加多级缓存。

 

缓存击穿

产生原因:

  热点key :1,在某一段时间高并发访问  2,缓存重建时间较长

  热点key突然过期,因为重建时间较长,导致在这段时间内大量请求到达数据库,带来巨大冲击

解决方案:

  1,互斥锁

    思路:给缓存重建过程加锁,确保重建过程只有一个线程执行,其他线程等待

    优点:实现简单,没有额外内存消耗,一直性好

    缺点:等待导致性能下降,有死锁风险

  2,逻辑过期

    思路:热点key缓存永不过期,而是设置一个逻辑过期时间,查询到热点数据是对逻辑过期时间进行判断,来决定是否需要缓存重建

       重建缓存也通过互斥锁保证单线程执行

       重建利用独立线程异步执行,其他线程无需等待,直接查询到旧的数据即可

    优点:线程无需等待,性能较好

    缺点:不保证一致性,有额外内存消耗,实现复杂

  

 

原文地址:http://www.cnblogs.com/tyleaf/p/16874984.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性