缓存穿透、雪崩、击穿解决方案
2020-12-28 本文已影响0人
一生逍遥一生
Redis相关数据结构
Redis List适用场景为:排名、排行榜、近期访问数据列表等业务。
Redis Set适用场景为:解决重复提交、剔除重复ID等。
Redis SortedSet适用于充值排行榜、积分排行榜、成绩排名等应用场景。
Redis过期KEY的操作:1.SETNX指定KEY的过期时间;2.使用RedisTemplate的expire方法来指定过期时间。
缓存穿透、雪崩、击穿解决方案
缓存穿透
缓存穿透:访问数据库中不能存在的数据,因为缓存中不存这样的数据,数据库的压力很大。需要解决这样的问题,将不存在的数据的放入到缓存中。
@Override
public Item getItemInfo(String itemCode) throws JsonProcessingException {
Item item = null;
final String key = keyPrefix + itemCode;
ValueOperations valueOperations = redisTemplate.opsForValue();
if (redisTemplate.hasKey(key)) {
Object res = valueOperations.get(key);
if (null != res && !Strings.isNullOrEmpty(res.toString())) {
item = objectMapper.readValue(res.toString(), Item.class);
}
} else {
item = itemMapper.selectByCode(itemCode);
if (null != item) {
valueOperations.set(key, objectMapper.writeValueAsString(item));
} else {
valueOperations.set(key, "", 30L, TimeUnit.MINUTES);
}
}
return item;
}
缓存击穿
缓存击穿:指缓存中某个频繁被访问的KEY,在不停地扛着前端的高并发请求,当KEY在某个瞬间过期失效时,持续的高并发访问会击穿缓存,需要将这个KEY设置为不会过期。
缓存雪崩
缓存雪崩:在某个时间点,缓存中的KEY集体发生过期失效导致大量查询数据库的请求都落在DB上,导致负载过高;对这些KEY设置不同的、随机的TTL,错开缓存中
KEY的失效时间点。