美文网首页
缓存穿透、雪崩、击穿解决方案

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

作者: 一生逍遥一生 | 来源:发表于2020-12-28 20:48 被阅读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的失效时间点。

    相关文章

      网友评论

          本文标题:缓存穿透、雪崩、击穿解决方案

          本文链接:https://www.haomeiwen.com/subject/cfotoktx.html