#RePost #DevOps #Mark

缓存系统可能出错的情况通常可以分为以下几种类型,每种类型都有相应的解决方案:

1. 缓存穿透:

当请求的数据既不在缓存中,也不在数据库中时,请求会直接穿透缓存层,到达数据库层。这可能是由于恶意攻击或者程序错误造成的。
解决方案:
对请求参数进行校验,比如用户鉴权校验,对id进行基础校验,拦截不合法的请求。
如果查询数据库没有值,也将其存入缓存,但设置一个较短的过期时间,如30秒。
使用布隆过滤器来检查一个key是否已经被查询过,如果已经查询过,就不再查询数据库。

1. 缓存击穿:

当一个热点key的访问量非常大,且在某一时刻过期,会导致大量请求瞬间到达数据库,可能导致数据库崩溃。
解决方案:
对于热点数据,慎重考虑过期时间,确保热点期间key不会过期,甚至可以设置为永不过期。
使用互斥锁,确保在访问key时,只有一个线程可以查询数据库并更新缓存。
使用限流和降级策略,当访问量超过一定阈值时,限制或拒绝部分请求。

1. 缓存雪崩:

在某一时刻,多个key同时失效,导致大量请求无法从缓存中获取数据,转而访问数据库,可能造成数据库压力过大。
解决方案:
对每个key的过期时间设置一个随机值,避免所有key同时过期。
使用高可用的分布式缓存集群,确保缓存的高可用性。
实现缓存预热,提前加载热点数据到缓存中。

1. 双写不一致:

在读写操作中,可能会出现数据库和缓存中的数据不一致的情况。
解决方案:
使用事务来保证数据库和缓存的更新操作的原子性。
使用消息队列,确保缓存更新操作在数据库更新操作之后执行。
使用缓存穿透的解决方案,将不存在的数据也缓存起来,设置较短的过期时间。

这些解决方案可以帮助开发者在设计和维护缓存系统时,预防和处理可能出现的问题。在实际应用中,可能需要根据具体的业务场景和系统架构来选择合适的策略。

https://m.okjike.com/originalPosts/65ec4bc137f7165b21510cf7

Message link
 
 
Back to Top
OKHK