面试时问到一个问题,什么是缓存雪崩

早两天去XX公司面试,面试也有大家都讨厌的笔试这一部份。不过我一般不会去写具体的算法,只在上面写上逻辑

如果真的要我写上具体的算法,请提供上机环境,毕竟开发与手写环境不一样,心情也不一样。

回到正题,里面有一道题,说到什么是缓存雪崩。因为之前有做过页面静态化,后来MVC也有页面缓存这一块,所以对缓存这块的

知识了解不是很深。所以当时也答不上来。

对于不了解,不知道的知识,最好的方法就是在百度上Google一下。从网上知道

 

缓存穿透

查询一个必然不存在的数据。比如文章表,查询一个不存在的id,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成影响。

缓存失效

如果缓存集中在一段时间内失效,DB的压力凸显。这个没有完美解决办法,但可以分析用户行为,尽量让失效时间点均匀分布。

缓存系统不得不考虑的另一个问题是缓存穿透与失效时的雪崩效应。缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个存在的数据每次请求都要到存储层去查询,失去了缓存的意义。

有 很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。在数据魔方里,我们采用了一个更为简单粗暴的方法,如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

缓 存失效时的雪崩效应对底层系统的冲击非常可怕。遗憾的是,这个问题目前并没有很完美的解决方案。大多数系统设计者考虑用加锁或者队列的方式保证缓存的单线 程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上。在数据魔方中,我们设计的缓存过期机制理论上能够将各个客户端的数据失效时间均 匀地分布在时间轴上,一定程度上能够避免缓存同时失效带来的雪崩效应。

 

写上这一篇文章,记录一下不了解的知识,作为一个笔记,挺好的。

最近也还在找工作,本人在广州,想找一个作为开发管理者的角色的工作来做。我也有过项目管理的经验。

面试过几家公司,想回中山工作。有中山的工作介绍不?

 

以上的技术内容参考于:http://www.12huiyuan.com/ArticleDetail/343

posted @ 2014-03-29 00:04  diamondiamon  阅读(2119)  评论(0编辑  收藏  举报