redis-缓存穿透与缓存雪崩

缓存穿透

缓存系统,按照KEY去查询VALUE,KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力。


如何避免

1.对查询机构为空的情况也进行缓存,缓存的时间设置端一点,或者对该KEY对应的数据insert之后清理缓存。

2.对一定不存在的key进行过滤,可以把所有存在的key放到一个大bitmap中,查询时通过该bitmap过滤。

 

 

缓存雪崩

 

分布式缓存系统面临的问题

缓存一致性问题

1:缓存系统与底层数据的一致性。这点在底层系统是“可读可写”时,写得尤为重要 

2:有继承关系的缓存之间的一致性。为了尽量提高缓存命中率,缓存也是分层:全局缓存,二级缓存。他们是存在继承关系的。全局缓存可以有二级缓存来组成。 

3:多个缓存副本之间的一致性。为了保证系统的高可用性,缓存系统背后往往会接两套存储系统(如memcacheredis等)

缓存穿透和缓存雪崩

上面有讲述。

 

缓存数据的淘汰

缓存淘汰的策略有两种: (1) 定时去清理过期的缓存。 2)当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。 

两者各有优劣,第一种的缺点是维护大量缓存的key是比较麻烦的,第二种的缺点就是每次用户请求过来都要判断缓存失效,逻辑相对比较复杂,具体用哪种方案,大家可以根据自己的应用场景来权衡。

 

1. 预估失效时间 2. 版本号(必须单调递增,时间戳是最好的选择)3. 提供手动清理缓存的接口。

你可能感兴趣的:(redis-缓存穿透与缓存雪崩)