防止缓存击穿
1. 缓存事故
缓存雪崩、缓存击穿和缓存穿透是缓存系统中常见的比较严重的问题。
缓存雪崩: 缓存在同一时刻全部失效,造成瞬间
DB请求量过大、压力骤增,引起雪崩。缓存雪崩通常因为缓存服务器宕机、缓存的key设置了相同的过期时间等引起。
缓存击穿:一个存在的热点key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到
DB,造成瞬间DB请求量过大、压力骤增。
缓存穿透:查询一个不存在的数据,因为不存在则不会写到缓存中,所以每次都会去请求
DB,如果瞬间流量过大,穿透到DB,导致宕机。
2. singleflight的实现
当并发地向同一个节点发起N个请求时,如果对数据库的访问没有做任何限制,很可能向数据库也会发起N次请求,容易造成缓存击穿和穿透。即使对数据库做了防护,HTTP请求也是十分消耗资源的操作,针对相同的key,向同一个节点发起多次请求是完全没有必要的。
singleflight
GoCache中设计了名为singleflight的package

最低0.47元/天 解锁文章
571

被折叠的 条评论
为什么被折叠?



