redis缓存有哪些问题?一致性?击穿?雪崩等如何解决?

缓存穿透:指查询一个一定不存在的数据。由于缓存命不中时会去查询数据库,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。

解决方案:

1.是将空对象也缓存起来,并给它设置一个很短的过期时间,最长不超过5分钟

2.采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力

雪崩:如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,就会造成缓存雪崩。

解决方案:

   1.尽量让失效的时间点不分布在同一个时间点
  2.保证缓存层服务的高可用,即使个别节点、个别机器、甚至是机房宕掉,依然可以提供服务,比如 Redis Sentinel 和 Redis Cluster 都实现了高可用。

缓存击穿:是指一个key非常热点,在不停的扛着大并发,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

解决方案:

  可以设置key永不过期

猜你喜欢

转载自www.cnblogs.com/m-zone/p/12369725.html