缓存穿透和缓存失效

缓存穿透缓存

是指查询一个必定不存在的数据,因为缓存是不命中时被动写的,而且出于容错考虑,若是从存储层查不到数据则不写入缓存,这将致使这个存在的数据每次请求都要到存储层去查询,失去了缓存的意义。并发

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

 

缓存失效队列

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

相关文章
相关标签/搜索