Redis-实战篇-编码解决商铺查询的缓存穿透问题(缓存空对象)

文章目录

1、缓存穿透

缓存击穿是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。

2、常见的解决方案有两种:

2.1、缓存空对象

优点:实现简单,维护方便
缺点:额外的内存消耗、可能造成短期的不一致

2.2、布隆过滤器

优点:内存占用较少,没有多余key
缺点:实现复杂、存在误判可能

3、编码解决商铺查询的缓存穿透问题

3.1、queryById

java 复制代码
    @Override
    public Result queryById(Long id) {
        String key = CACHE_SHOP_KEY + id;
        //1、从redis查询商铺缓存
        String shopJson = stringRedisTemplate.opsForValue().get(key);
        //2、判断是否存在
        if (StrUtil.isNotBlank(shopJson)) {
            //3、存在,直接返回
            Shop shop = JSONUtil.toBean(shopJson, Shop.class);
            return Result.ok(shop);
        }

        //判断命中的是否是空值
        if (shopJson != null) {
            return Result.fail("店铺不存在!");
        }

        //4、不存在,根据id查询数据库
        Shop shop = getById(id);
        //5、数据库不存在,返回错误
        if (shop == null) {
            // 将空值写入redis
            stringRedisTemplate.opsForValue().set(key, "", CACHE_NULL_TTL, TimeUnit.MINUTES);
            //返回错误信息
            return Result.fail("店铺不存在!");
        }
        //6、存在,写入redis
        stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop),CACHE_SHOP_TTL, TimeUnit.MINUTES);
        //7、返回
        return Result.ok(shop);
    }

3.2、RedisConstants.java

java 复制代码
    public static final Long CACHE_NULL_TTL = 2L;

    public static final Long CACHE_SHOP_TTL = 30L;
    public static final String CACHE_SHOP_KEY = "cache:shop:";
相关推荐
还是大剑师兰特25 分钟前
Windows Redis 完整下载‑安装‑配置教程
windows·redis
oradh8 小时前
Oracle TX 锁 Mode 4(Share)问题排查总结
数据库·oracle·tx 锁 mode 4·oracle tx 锁
yi.Ist9 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
接着奏乐接着舞。13 小时前
【2026】73道Redis 常见面试题与参考答案
数据库·redis·后端·缓存
Irene199114 小时前
格式化掩码 FM999999999999999999999.00 是 Oracle 数据库中 TO_CHAR 函数的数字格式模型
oracle·数字格式
蓝鸟197416 小时前
Oracle HIS业务视图优化实战|VI_BQ_YWTX11从高耗费到秒级响应
数据库·oracle·his数据库调优·复合索引踩坑·is null索引问题·ql视图优化
ApacheSeaTunnel16 小时前
用 Apache SeaTunnel 同步 DynamoDB 到 Redis,一个配置文件就够
redis·开源·seatunnel·数据同步·dynamodb
MetaLite20 小时前
SpringBoot防重复提交-加一把Redis锁就够吗
spring boot·redis·后端
Seraphina3620 小时前
记一次实验:利用缓存服务器规范化技术进行网页缓存欺骗
经验分享·笔记·网络安全·缓存
煮煮论英雄20 小时前
单文件部署的MQTT轻量级物联网数据平台
jvm·物联网·oracle