缓存穿透、雪崩、击穿解决方案

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的失效时间点。

上一篇下一篇

猜你喜欢

热点阅读