redis常见问题及解决方案

91 阅读2分钟
  1. 缓存雪崩:缓存失效或Redis故障导致大量请求直接进入数据库,数据库承载不了大量请求 7801e5bda7b4f67d6ea28f4ca92663a2.png

解决办法

  • 分散缓存失效时间 不同缓存设置不同的过期时间 7149f0839fb28b32c189be4121b50713.png

  • 热门数据不设置过期时间

热门数据不设置过期时间。我们可以针对一些热门商户和热门商品的数据,也就是系统中最热门的数据,设置为数据永不过期

0a23b8d2dc26ff49d27182e7c2c991db.png

  • 提前预热缓存数据

缓存预热就是在系统启动之后,或者系统运行期间定期地将一些缓存数据直接加载到缓存系统,这样就可以避免等到用户请求的时候再去查询数据库,然后再将数据回写到缓存 a8047fbcc07d5b2004619e7a7fcc7dfe.png

2、缓存击穿:热点key失效瞬间,大量请求进入数据库。解决方案是使用分布式锁,通过锁来控制请求进入数据库的数量,避免大量请求同时涌入数据库。

image.png 3、缓存穿透:查询大量不存在的数据,无效请求进入数据库,导致数据库超负荷。解决方案是使用空对象缓存或者缓存预热,避免无效请求进入数据库。

image.png 4、缓存并发:多个线程同时对同一个key进行读写操作,导致数据不一致。解决方案是使用Redis的事务机制,将get和set操作放在一个事务中执行,避免并发问题。

5、大key问题:value过大或者hash、list等节点个数过多,导致内存占用过多,影响Redis性能。解决方案是对大key进行拆分,将其分解为多个小key,降低单个key的大小和节点数量;同时定期对大key进行删除或重构操作,避免其占用过多内存资源。(redis-rdb-tools可以扫描出大key)

image.png