什么是缓存穿透缓存雪崩 及 解决缓存穿透雪崩解决方案实现

Posted Perceus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是缓存穿透缓存雪崩 及 解决缓存穿透雪崩解决方案实现相关的知识,希望对你有一定的参考价值。

(目录)


1、 缓存穿透问题的解决思路

缓存穿透 :


常见的解决方案有两种:

  1. 缓存空对象
  1. 布隆过滤


缓存空对象思路分析:

布隆过滤:


① 编码解决商品查询的缓存穿透问题:

核心思路如下:

  • 在原来的逻辑中:
  • 现在的逻辑中:


代码:

    /**
     *  查询商铺
     * @param id
     * @return
     */
    @Override
    public Result queryShopById(Long id) 

        // 1. 从 Redis 中查询商铺缓存
        String shopJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY + id);

        // 2. 判断是否存在
        // 3. 存在 , 直接返回
        if(StrUtil.isNotBlank(shopJson))
            Shop shop=JSONUtil.toBean(shopJson, Shop.class);
            return Result.ok(shop);
        

        //判断命中空值 返回 404
        if(shopJson != null) 
            // 返回一个错误信息
            return Result.fail("商铺不存在");
        

        // 4. 不存在 ,根据 id 去数据库查询
        Shop shop = getById(id);
        // 5. 不存在 , 返回 404
        if(shop==null)
            stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + id, "",CACHE_NULL_TTL,TimeUnit.MINUTES);
            return Result.fail("商铺不存在");
        

        // 6. 存在 , 写入 Redis
        stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + id, JSONUtil.toJsonStr(shop),CACHE_SHOP_TTL, TimeUnit.MINUTES);

        return Result.ok(shop);
    


② 总结:

  1. 缓存穿透产生的原因是什么?
  1. 缓存穿透的解决方案有哪些

2、 缓存雪崩问题及解决思路

缓存雪崩:

解决方案:


以上是关于什么是缓存穿透缓存雪崩 及 解决缓存穿透雪崩解决方案实现的主要内容,如果未能解决你的问题,请参考以下文章

Redis——缓存穿透缓存击穿缓存雪崩分布式锁

Redis的缓存问题之缓存穿透缓存雪崩缓存击穿

Redis缓存穿透缓存击穿缓存雪崩产生原因及解决方案

如何解决Redis缓存雪崩击穿与穿透

带你整理面试过程中关于Redis的缓存雪崩,击穿,穿透及缓存和数据库双写一致性问题

缓存击穿、穿透、雪崩及Redis分布式锁