Redis的数据不可能是一成不变的,因此本节讲一下Redis的缓存更新策略

内存淘汰 超时剔除 主动更新
说明 当内存不足时自动淘汰部分数据。下次查询时更新缓存。 添加TTL时间,到期后自动删除缓存。 在修改数据库的同时,更新缓存。
一致性 一般
维护成本

业务场景:

三个常见问题

  1. 删除缓存还是更新缓存? 更新缓存:每次更新数据库都更新缓存,无效写操作较多 删除缓存:更新数据库时让缓存失效,查询时再更新缓存(👍)

  2. 如何保证缓存与数据库的操作的同时成功或失败?(暂不考虑) 单体系统,将缓存与数据库操作放在一个事务 分布式系统,利用TCC等分布式事务方案

  3. 先操作缓存还是先操作数据库?

    先删除缓存,再操作数据库 先操作数据库,再删除缓存(👍)

Untitled

但是总的来说操作数据库时间>写入缓存的时间。还是先操作数据库,再操作缓存好。

更新缓存策略:

@Override
@Transactional
public void updateShopById(Shop shop) {
    // 1. 更新数据库
    this.updateById(shop);
    // 2. 删除缓存
    stringRedisTemplate.delete(CACHE_SHOP_KEY + shop.getId());
}