程序员做网站如何赚钱,成都网站制作售后,上海的网站建设,discuz做影视网站在后端系统架构中#xff0c;为了提升读请求性能、减轻数据库压力#xff0c;我们通常会引入 Redis 等分布式缓存#xff0c;将热点数据缓存起来#xff0c;形成「数据库#xff08;MySQL#xff09; 缓存#xff08;Redis#xff09;」的双层存储架构。 而双写一致性// 获取写锁RLockwriteLockreadWriteLock.writeLock();try{// 加写锁writeLock.lock();System.out.println(writeLock...);// 1. 更新业务数据示例模拟更新商品信息ItemitemnewItem(id,华为手机,华为手机,5299.00);try{// 模拟业务处理耗时Thread.sleep(10000);}catch(InterruptedExceptione){e.printStackTrace();}// 2. 删除缓存redisTemplate.delete(item:id);}finally{// 释放写锁writeLock.unlock();}}共享锁读锁publicItemgetById(Integerid){// 获取读写锁RReadWriteLockreadWriteLockredissonClient.getReadWriteLock(ITEM_READ_WRITE_LOCK);// 获取读锁RLockreadLockreadWriteLock.readLock();try{// 加读锁readLock.lock();System.out.println(readLock...);// 1. 先查询缓存Itemitem(Item)redisTemplate.opsForValue().get(item:id);if(item!null){// 缓存命中直接返回returnitem;}// 2. 缓存未命中查询业务数据示例模拟从数据库查询itemnewItem(id,华为手机,华为手机,5999.00);// 3. 写入缓存redisTemplate.opsForValue().set(item:id,item);// 4. 返回数据returnitem;}finally{// 释放读锁readLock.unlock();}}三、高级方案异步通知解耦高可用1. MQ异步通知方案流程更新DB → 发送“删除缓存”消息到MQ → 消费端监听消息 → 删除缓存核心优势利用MQ的持久化重试机制保证缓存最终被删除且业务线程无需等待缓存操作接口响应快缺点有代码侵入需业务主动发消息消息延迟可能导致短暂不一致。2. Canal阿里异步同步方案原理Canal伪装成MySQL从库读取MySQL的Binlog数据变更日志 → 解析Binlog → 异步更新/删除Redis缓存优点零业务代码侵入Binlog天然有序能保证更新顺序一致性更高缺点部署维护成本高Binlog解析有轻微延迟毫秒级不适合极致强一致场景。四、补充方案定时任务兜底对核心数据定时从DB全量同步到Redis修正可能的不一致适合数据变更频率低的场景TTL兜底给缓存设置合理过期时间即使出现脏数据也会自动过期保证最终一致全量更新不推荐写操作直接更新DB更新缓存优点是简单缺点是性能差很多更新无意义、并发下易出现数据覆盖。五、总结性能优先、允许短暂不一致选延迟双删核心 MQ/Canal兜底强一致性优先、读多写少选Redisson读写锁不想侵入业务代码、追求极致解耦选Canal方案中小规模业务延迟双删即可满足需求无需过度设计。关键点回顾延迟双删是基础方案两次删除的核心是解决“并发读回填旧缓存”问题延迟时长需覆盖读请求回写缓存的耗时互斥锁/读写锁保证强一致但牺牲性能适配库存、优惠券等核心场景MQ/Canal是异步解耦方案利用MQ可靠性/Canal零侵入特性保证最终一致性。