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

修改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();
    }
    
相关推荐
Mahir086 小时前
Redis 与 MySQL 数据同步:一致性保证的完整解决方案
数据库·redis·mysql·缓存·面试·数据一致性
多加点辣也没关系8 小时前
Redis 的安装(详细教程)
数据库·redis·缓存
数据库小学妹8 小时前
数据库连接池避坑指南:告别“连接超时”与“资源耗尽”,让系统跑得更快!
数据库·redis·sql·mysql·缓存·dba
环流_14 小时前
Redis中string类型的应用场景
数据库·redis·缓存
1892280486117 小时前
NV232固态闪存MT29F32T08GWLBHD6-TES:B
大数据·服务器·人工智能·科技·缓存
1892280486118 小时前
NV231美光闪存MT29F32T08GWLBHD6-MES:B
大数据·服务器·人工智能·科技·缓存
2501_9219392619 小时前
Redis
数据库·redis·缓存
手握风云-20 小时前
Redis:不只是缓存那么简单(十一)
redis·缓存
Web极客码20 小时前
Python Deque:构建实时滑动窗口与高性能缓存的“隐藏高手”
java·python·缓存
June`20 小时前
多线程redis项目基石
数据库·redis·缓存