黑马点评---给查询店铺的缓存添加超时剔除和主动更新的策略

修改ShopController中的业务逻辑,满足以下两个需求:

1、根据id查询店铺时,如果缓存未命中,则查询数据库,将数据库结果写入缓存,并设置超时时间

java 复制代码
@Service
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Override
    public Result queryById(Long id) {
        //1.从redis查商铺缓存
        String key =CACHE_SHOP_KEY + id;
        String shopJson = stringRedisTemplate.opsForValue().get(key);

        //2.判断是否存在 如果不为空(存在)
        if(StrUtil.isNotBlank(shopJson)){
            //3.存在,直接返回
            //反序列化json
            Shop shop = JSONUtil.toBean(shopJson, Shop.class);
            return Result.ok(shop);
        }
        //4.不存在,根据id查数据库
        Shop shop = getById(id);
        //5.数据库不存在,返回错误
        if(shop == null){
            return Result.fail("店铺不存在");
        }
        //6.存在,写入redis
        stringRedisTemplate.opsForValue().set(key,JSONUtil.toJsonStr(shop),CACHE_SHOP_TTL, TimeUnit.MINUTES);

        //7.返回
        return Result.ok(shop);
    }
}

2、根据id修改店铺时,先修改数据库,再删除缓存

java 复制代码
    @PutMapping
    public Result updateShop(@RequestBody Shop shop) {
        // 写入数据库
//        shopService.updateById(shop);
        return shopService.update(shop);
    }
 
java 复制代码
  @Override
    @Transactional
    public Result update(Shop shop) {
        Long id = shop.getId();
        if(id == null){
            return Result.fail("店铺id不能为空");
        }
        //写入数据库
        updateById(shop);
        //删除缓存
        stringRedisTemplate.delete(CACHE_SHOP_KEY + id);

        return Result.ok();
    }
    
相关推荐
我是大猴子7 小时前
Redis为什么不适合做持久化和DB的区别在哪里
数据库·redis·缓存
闪电悠米7 小时前
黑马点评-秒杀优化-04_lua_and_db_fallback
服务器·开发语言·网络·数据库·缓存·junit·lua
heimeiyingwang8 小时前
【架构实战】日志体系设计:从ELK到可观测性的演进
分布式·缓存·架构
骄马之死8 小时前
Redis 核心知识点总结
数据库·redis·缓存
程序员二叉8 小时前
【Java】 面试核心合集:BigDecimal、缓存池、多态、反射全解析
java·缓存·面试
超梦dasgg8 小时前
连接 & 连接池完整详解(以数据库连接最常用,Redis/MQ 同理)
数据库·redis·缓存
我是一颗柠檬9 小时前
【Redis】Redis分布式锁Day13(2026年)
java·redis·分布式·缓存
程序员二叉1 天前
【Redis】 缓存三大问题 + 大Key/热Key 全面解析
数据库·redis·缓存
闪电悠米1 天前
黑马点评-秒杀优化-01_async_seckill_idea
java·数据库·ide·redis·分布式·缓存·intellij-idea
闪电悠米1 天前
黑马点评-秒杀优化-02_lua_precheck
开发语言·redis·分布式·缓存·junit·wpf·lua