Redis缓存穿透
即查询一个并不存在的id的数据,会导致每次查询的时候,redis中没有具体的对应的数据,从而在DB中查找,恶意请求,会出现大量的访问DB的场景,从而加大DB的压力。
解决方案:为不存在的ID在redis中设置值,同时为对应的key设置失效时间。建议将失效时间设置短一些,保证不会太大影响到redis。
Redis缓存雪崩
该场景主要是在对缓存中的大批量数据设置了同一时间失效,导致在同一时间内,redis缓存中的数据过期,使得全部访问DB,DB的压力增大。
解决方案:将各个数据的key的失效时间设置错开,如果有批量的,可以利用随机数来处理。
redis缓存击穿
该场景主要是针对于特别热点的数据。即该数据访问量极大,致使在Redis缓存中的数据一旦过期,就会出现同一时刻内,redis数据没有更新重置的时候,大批量的请求到DB,增大DB压力。
解决方案:
1、利用锁,即,如果当前key不存在,则加锁,然后查询DB,从DB查出数据更新至缓存Redis,然后释放锁。和Redis分布式锁一致,setnx。
2、错开过期时间。为某些特定的热点数据,设置俩个key,分别放置不同的过期时间,第一个key未能查到,则查找第二个。