欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > Redis-实战篇-实现商铺缓存与数据库的双写一致(超时剔除和主动更新)

Redis-实战篇-实现商铺缓存与数据库的双写一致(超时剔除和主动更新)

2025/9/27 2:53:04 来源:https://blog.csdn.net/m0_65152767/article/details/139988953  浏览:    关键词:Redis-实战篇-实现商铺缓存与数据库的双写一致(超时剔除和主动更新)

文章目录

  • 1、给查询商铺的缓存添加超时剔除和主动更新的策略
  • 2、根据id查询店铺
    • 2.1、queryById
    • 2.2、RedisConstants.java
  • 3、根据id修改店铺
    • 3.1、ShopController.java
    • 3.2、update

1、给查询商铺的缓存添加超时剔除和主动更新的策略

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

  1. 根据id查询店铺时,如果缓存未命中,则查询数据库,将数据库结果写入缓存,并设置超时时间
  2. 根据id修改店铺时,先修改数据库,再删除缓存

2、根据id查询店铺

2.1、queryById

    @Overridepublic 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);}//4、不存在,根据id查询数据库Shop shop = getById(id);//5、数据库不存在,返回错误if (shop == null) {return Result.fail("店铺不存在!");}//6、存在,写入redisstringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop),CACHE_SHOP_TTL, TimeUnit.MINUTES);//7、返回return Result.ok(shop);}

在这里插入图片描述

2.2、RedisConstants.java

    public static final Long CACHE_SHOP_TTL = 30L;public static final String CACHE_SHOP_KEY = "cache:shop:";

在这里插入图片描述

3、根据id修改店铺

3.1、ShopController.java

    @PutMappingpublic Result updateShop(@RequestBody Shop shop) {// 写入数据库//shopService.updateById(shop);//return Result.ok();return shopService.update(shop);}

3.2、update

    @Override@Transactionalpublic Result update(Shop shop) {Long id = shop.getId();if (id == null) {return Result.fail("店铺id不能为空");}//1、更新数据库updateById(shop);//2、删除缓存stringRedisTemplate.delete(CACHE_SHOP_KEY + id);return Result.ok();}
}

在这里插入图片描述
在这里插入图片描述

此时刷新redis发现,商户信息已经被删除

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词