-
-
Notifications
You must be signed in to change notification settings - Fork 19.2k
Closed
Description
缓存雪崩的问题:
缓存雪崩的事前事中事后的解决方案如下。
事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。
事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。
事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。
redis 重启后从磁盘上加载的数据应该都是过期的数据了吧?和数据库不一致了。
缓存穿透的问题:
举个栗子。数据库 id 是从 1 开始的,结果黑客发过来的请求 id 全部都是负数。这样的话,缓存中不会有,请求每次都“视缓存于无物”,直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。
解决方式很简单,每次系统 A 从数据库中只要没查到,就写一个空值到缓存里去,比如 set -999 UNKNOWN。这样的话,下次便能走缓存了。
感觉这样并没有解决缓存穿透的问题,黑客只需要把每次请求id设置为不一样的负数就可以了
Metadata
Metadata
Assignees
Labels
No labels