文档章节

注意cache同时过期问题

鉴客
 鉴客
发布于 2011/04/19 13:04
字数 704
阅读 247
收藏 3

记得在去年,一个应用有个比较消耗资源的后端查询,使用memcached做了一层缓存,缓存时间30分钟(按业务需求来讲,更长点也没关系),按理说,应该完全没有任何问题了,但是出现了一个奇怪的问题,就是在高峰期重启memcached后,会导致大量的后端查询,出现后端服务不过来的情况。这点倒是可以理解。但是在正常运行过程中,随着访问的增加,查询也是一阵阵的访问数据库,形成一个波浪式的访问。

还记得在08年刚来公司的时候,有一个tomcat下的Java应用,缓存是构建在jvm内部的(事实上,很多Java应用的缓存都是构建在jvm内部的,因为简单,效率非常高),随着业务量的增加,支撑不了访问量,频繁宕机,宕机重启tomcat是个很大的问题,根本没法直接启动,启动后几秒就又会宕掉,只能把流量在nginx上挡开,让tomcat启动起来了,等待内部缓存建立,大概会需要10-20分钟,再上线服务。

上面的两个问题都是缓存在同一时间过期造成的。比如应用的某个功能的数据,在缓存的时候都设置成缓存30分钟,那么在cache重启后,将同时产生大量的后端查询来重建缓存,大量的数据都被设置在30分钟过期,30分钟过后,又几乎同时需要对后端进行查询来重构失效后的缓存,这无形对数据库造成了一些不必要的风险。如下图

图1 cache 同时过期的波浪式穿透DB

 解决办法:

在一个比较大的应用中,cache尽量使用服务的形式,跟web应用进行隔离开来,避免应用重启导致重建cache对后端的冲击。(其实这样能提高多个web下面的缓存利用率)

cache服务尽量使用多个,避免一个宕机重建全部cache对后端的冲击。多个cache服务尽量使用一致性hash的模式。

cache同时过期的问题,比如是30秒过期,可以找个业务可以接收的范围,比如25-40秒之间随机一个过期时间,可以减少同时过期的概率。

可以考虑使用多级cache。

事实上,在设计系统的时候,就需要考虑cache如果失效对系统产生的可能冲击影响,以及如何去避免这些问题的发生。重启系统可以考虑一个缓存预热的过程。

本文转载自:http://www.cnblogs.com/sunli/archive/2010/09/06/cache_expire_same_time.html

鉴客

鉴客

粉丝 954
博文 35
码字总数 1356
作品 0
长春
高级程序员
私信 提问
缓存穿透、缓存击穿和缓存雪崩实践

我们使用缓存的主要目是提升查询速度和保护数据库等稀缺资源不被沾满。而缓存最常见的问题是缓存穿透、击穿和雪崩,在高并发下这三种情况都会有大量请求落到数据库,导致数据库资源沾满,引起...

xiaolyuh
2018/12/28
0
0
http缓存与cdn缓存配置指南

腾讯DeepOcean原创文章:dopro.io/http-cache-… 配置http缓存与cdn缓存一直以来都是web性能优化中重要而常见的手段。合理的http缓存与cdn缓存配置可以起到减轻服务器压力,缓解网络瓶颈,提...

腾讯DeepOcean
2018/11/12
0
0
针对web开发者的浏览器缓存指南(译)

原文链接 个人文章汇总在blog 概要 缓存是一个非常重要同样也非常复杂的浏览器特性 在这篇文章中,我们将解释浏览器是如何利用缓存来使加载页面更快,哪些因素决定了缓存的周期,在必要的时候...

下半身要幸福
01/18
0
0
Redis--大部分人不知道的缓存击穿与缓存设置顺序的操蛋事

一、关于缓存设置顺序: cache,在web设计中经常用,大家也都会知道设置cache可以提高系统的响应速度,在做这个cache的时候,不知道为什么,很多人的流程都是:读取数据时,先从cache中读取数...

朱飞东
2018/06/21
0
0
如何解决多线程高并发场景下的 Java 缓存问题?

作者 | LLLSQ 责编 | 郭芮 互联网软件神速发展,用户的体验度是判断一个软件好坏的重要原因,所以缓存就是必不可少的一个神器。在多线程高并发场景中往往是离不开cache的,需要根据不同的应用...

CSDN资讯
2018/09/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

采坑指南——k8s域名解析coredns问题排查过程

正文 前几天,在ucloud上搭建的k8s集群(搭建教程后续会发出)。今天发现域名解析不了。 组件版本:k8s 1.15.0,coredns:1.3.1 过程是这样的: 首先用以下yaml文件创建了一个nginx服务 apiV...

码农实战
27分钟前
3
0
【2019年8月版本】OCP 071认证考试最新版本的考试原题-第6题

choose three Which three statements are true about indexes and their administration in an Orade database? A) An INVISIBLE index is not maintained when Data Manipulation Language......

oschina_5359
30分钟前
4
0
阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布

导读:新版本主要有三大变化:同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新;带来了正式的 feature:G1ElasticHeap;发布了用户期待的 Windows 实验版本 Experimental Windows version。...

阿里巴巴云原生
35分钟前
3
0
教你玩转Linux—磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少...

xiangyunyan
38分钟前
6
0
js 让textarea的高度自适应父元素的高度

textarea按照普通元素设置height是没有作用的,可以这么来设置, 下面给上一段项目代码 JS代码: $.fn.extend({ txtaAutoHeight: function () { return this.each(function () {...

文文1
38分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部