对于某些具有过期时间的key,如果这些键可以在某个时间点并发地访问,那么它就是一个非常“hot”的数据。
而当该缓存在某个时间点过期时,就在此时,有很多对这个键的并发请求。这些请求发现缓存过期,,通常直接在后端加载数据并将其设置回缓存。此时,大型并发请求可能会立即淹没后端DB。
SETNX是“set if not exists”的缩写,它只在key不存在的时候才会设置缓存,可以用来实现锁的效果。
缓存渗透指的是在查询某个不存在的数据时,因为只有在DB数据命中时,才会写入缓存,而当DB层数据未命中,我们并不会缓存,导致对不存在的数据的每次请求,都将直接到DB层查询,而失去了缓存的意义。当流量大时,DB可能会挂起。如果有人经常使用不存在的密钥攻击我们的应用程序,这就是一个漏洞。
缓存雪崩【Cache avalanche】指的是由于使用相同的过期时间来设置缓存,而导致的缓存失效雪崩,所有请求都被转发给DB。DB的瞬时压力过大。