Redis更新缓存策略


1、缓存【失效】:客户端请求数据先从缓存中查询,如果没有再查询数据库,最后将数据放入缓存

2、缓存【命中】:客户端从缓存中直接取到数据,返回结果

3、缓存【更新】:客户端写入数据到数据库,成功之后,让缓存失效(下次请求时从缓存中拿不到,则查询数据库,再放入缓存)

4、为什么不采取更新后删除缓存策略?

      防止并发写操作导致脏数据

5、为什么不删除缓存后再更新数据库?

      两个并发请求,一个读操作,一个写操作,如果先删除缓存,读操作会将【旧数据】写入缓存,写操作【更新数据】后也不会更新缓存,导致脏数据一直存在

### Redis 缓存策略最佳实践 #### 1. 缓存的作用与意义 缓存在现代应用程序架构中扮演着至关重要的角色。通过减少对数据库的频繁访问,它可以显著提高系统的响应速度并降低服务器负载[^2]。对于商铺查询功能而言,合理使用Redis作为缓存层能够有效优化用户体验。 #### 2. 基础业务逻辑缓存 在实现商铺查询功能时,可以通过Redis存储热点数据来加速查询过程。例如,将经常被请求的商品类型或商铺信息预先加载到Redis中,并设置合理的过期时间以防止数据陈旧[^1]。 ```java // 将商铺信息保存至Redis string shopKey = "shop:" + shopId; redisTemplate.opsForValue().set(shopKey, shopInfo, Duration.ofMinutes(30)); ``` #### 3. 缓存更新策略 为了保持缓存的一致性和有效性,需要制定合适的缓存更新机制。以下是几种常见的更新方式: - **主动更新**: 当数据库中的记录发生变化时,立即同步修改对应的缓存内容[^3]。 ```java // 更新数据库的同时刷新缓存 public void updateShop(Shop newShopData) { shopRepository.update(newShopData); string shopKey = "shop:" + newShopData.getId(); redisTemplate.opsForValue().set(shopKey, newShopData.toJson(), Duration.ofMinutes(30)); } ``` - **删除缓存**: 如果无法及时更新缓存,则可以选择先清除原有缓存,在下次读取时重新生成最新版本的数据[^1]。 #### 4. 双写一致性保障 确保缓存与实际数据库之间的同步至关重要。一种常用的方法是在事务范围内完成两者的同时操作,即要么都成功提交更改,要么全部回滚[^2]。 ```sql BEGIN TRANSACTION; -- 修改数据库表项 UPDATE shops SET name='New Name' WHERE id=123; -- 清除关联缓存条目 DEL shop:123 COMMIT; ``` 如果采用编程语言层面处理这种场景下的线程安全性问题,可以考虑利用分布式锁服务(如Redlock算法),从而避免并发条件下可能出现的竞争条件[^1]。 #### 5. 高级特性支持 除了基本的功能外,还可以探索更多高级选项进一步增强系统表现力。比如基于TTL(Time To Live)控制资源生命周期;借助Bitmaps结构统计用户行为偏好等等。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值