缓存问题

面试中,我们经常被问到各种缓存问题,今天在这里就花些时间总结一下。

1,缓存击穿
    指在缓存中,某一个key被访问的非常频繁,在这个key失效的一瞬间,大量请求过来,导致请求直接查询数据库,对数据库造成异常的压力,甚至会造成数据库挂掉。

解决办法:

办法1:缓存永不过期。依然有大量请求过来或预期大量并发请求会过来,那设置一个较短生存周期的缓存有什么意义呢?还不如直接让缓存永不过期。

办法2:加一个互斥锁。

2,缓存穿透

指的是缓存和数据库中都不存在的数据,而用户不断发起请求,造成数据库压力过大。
解决办法:

1,接口层增加权限校验;(排除不合法攻击者)

2,缓存和数据库中都获取不到的数据,可以在缓存中设置一个key-value为key-null,缓存的有效时间可以适当设置一下,如3s,5s。(解决公司内部不合理的大量访问)
3,缓存雪崩

缓存中大批量的缓存数据几乎同时过期,导致直接查询数据库,造成数据库压力过大或直接宕机。
解决办法:

1,缓存的过期时间随机设置;

2,设置数据永不过期;

你可能感兴趣的:(缓存问题)