1.缓存穿透
从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,
缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。
这样可以防止攻击用户反复用同一个id暴力攻击
2. 缓存击穿
缓存中没有但数据库中有的数据,这时由于并发用户特别多,同时读缓存没读到数据,
又同时去数据库去取数据,引起数据库压力瞬间增大。
(1)设置热点数据永远不过期。
(2)加互斥锁,互斥锁。
3.缓存雪崩
大量缓存在同一时间过期失效
(1)设置不同的缓存过期时间
(2)缓存过期时间设置随机。
(3)设置热点数据永远不过期。
缓存穿透
描述:缓存和数据库都没有查到数据,用户的请求都直接去查数据库了,在高并发场景下数据库的压力会过大。
解决:设置value为null的缓存(key-null),并设置缓存过期时间不太长也不太短,比如说30秒。
缓存击穿
描述: 缓存没有数据,但数据库有,在高并发场景下,大量用户同时访问到缓存没有数据,都同时去查数据库,造成数据库压力过大。
解决: 1.设置热点数据永不过期;2.对读取数据库操作加互斥锁。
缓存雪崩
描述: 大量缓存在同一时间过期失效,大量用户请求都访问数据库,造成数据建库压力过大。
解决: 1.设置热点数据永不过期;2.将缓存设置不同的过期时间,比如设置缓存的过期时间为随机。