缓存学习实战篇

缓存练习题(用户查询操作)

    public List<ShopType> queryAllType() throws JsonProcessingException {
   
        //从缓存中查数据
        String shopTypeJson = stringRedisTemplate.opsForValue().get("cache:shopType");
        //如果缓存命中,
        if (StrUtil.isNotBlank(shopTypeJson)) {
   
            return new ObjectMapper().readValue(shopTypeJson, new TypeReference<List<ShopType>>() {
   
            });
        }
        //如果缓存不命中,查数据库
        List<ShopType> shopTypeList = shopTypeMapper.selectList(null).stream().sorted(Comparator.comparingInt(ShopType::getSort))
                .collect(Collectors.toList());
        if (shopTypeList == null) {
   
            return null;
        } else {
   
            stringRedisTemplate.opsForValue().set("cache:shopType", new ObjectMapper().writeValueAsString(shopTypeList));
        }
        //如果过数据库不命中,则返回错误
        //如果过数据库命中,则更新缓存
        return null;
    }

在这里插入图片描述

缓存更新策略(更新商品操作)

在这里插入图片描述

缓存操作很快,操作数据库很慢
方案1:如果先删除缓存,再操作数据库,线程1 ,清空缓存,线程2 查询缓存未命中,写入数据库数据是10,此时线程1,数据库更新
方案2:缓存因为某种原因失效了,线程1缓存未命中查出数据库10,另外一个线程2更新数据库,删除缓存,写缓存时数据为20,但是这种情况基本不存在
结论:由于缓存速度很快,所以第二种情况发生概率很低,采用先操作数据库,再删除缓存
在这里插入图片描述

在这里插入图片描述

    @Override
    @Transactional
    public Result update(Shop shop) {
   
        if (shop.getId() == null) {
   
            return Result.fail("500");
        }
        //1、更新数据库
        updateById(shop);
        //2、删除缓存
        stringRedisTemplate.delete(CACHE_SHOP_KEY + shop.getId());
        return Result.ok();
    }

缓存穿透

在这里插入图片描述

缓存空对象

空的值缓存到Redis
优点:实现简单,维护方便
缺点:额外的内存消耗;造成短期的不一致(如果此时数据库真的增加了,在TTL过期以后才能查询到真数据)
设置TTL,比如5分钟,方式恶意用户访问
在这里插入图片描述

布隆过滤

优点:内存占用较少,没有多余key
缺点:存在误判可能
在这里插入图片描述
在这里插入图片描述

相关推荐

  1. 【前端学习——js】7.函数缓存

    2024-01-12 11:54:04       18 阅读
  2. Redis缓存

    2024-01-12 11:54:04       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-12 11:54:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-12 11:54:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-12 11:54:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-12 11:54:04       18 阅读

热门阅读

  1. JVM 17 调优指南:如何进行JVM调优,JVM调优参数

    2024-01-12 11:54:04       30 阅读
  2. 【MySQL】MySQL基本语句

    2024-01-12 11:54:04       34 阅读
  3. 如何快速搭建体育/电竞比分网

    2024-01-12 11:54:04       38 阅读
  4. Flink集成Hive之Hive Catalog

    2024-01-12 11:54:04       35 阅读
  5. Devops相关问题及答案(2024)

    2024-01-12 11:54:04       29 阅读