Redis常见问题
缓存
缓存击穿
指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。
解决方案
- 设置热点数据永不过期
- 加互斥锁
缓存穿透
缓存和数据库中都没有的数据,而用户不断发起请求。由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。
解决方案
- 设置并发锁,防止请求大量请求数据库,如果获取到锁了,去数据库查询,如果没有,说明有其他线程在查询数据库,那么只需要重试一下就好了
- 设置拦截器,对于不存在得key,进行拦截
雪崩
Redis在某个时间大量失效,突然造成数据库访问压力急剧增大,像雪崩一样,雪崩危害巨大,甚至有可能服务器宕机。
解决方案
- 设置超时时间的时候要设置随机值,不要设置固定值。