成都网站建设v,网站备案地址,关于网页制作的网站,安徽外经建设集团网站目录一、缓存更新策略二、主动更新策略三、Cache Aside Pattern3.1 删除缓存还是更新缓存?3.2 如何保证缓存与数据库的操作同时成功或失败#xff1f;3.3 先操作缓存还是先操作数据库3.3.1 先删缓存再删库3.3.2 先删库再删缓存一、缓存更新策略 1.内存淘汰#xff1a;不用自…
目录一、缓存更新策略二、主动更新策略三、Cache Aside Pattern3.1 删除缓存还是更新缓存?3.2 如何保证缓存与数据库的操作同时成功或失败3.3 先操作缓存还是先操作数据库3.3.1 先删缓存再删库3.3.2 先删库再删缓存一、缓存更新策略 1.内存淘汰不用自己维护利用redis的内存淘汰机制当内存不足时自动淘汰部分数据下次查询时更新缓存一致性差没有维护成本 2.超时剔除给缓存数据添加TTL时间到期后自动删除缓存。下次查询时更新缓存一致性一般维护成本低 3.主动更新编写业务逻辑在修改数据库的同时更新缓存一致性好维护成本高 4.低一致性需求可以使用内存淘汰机制 5.高一致性需求可以主动更新并以超时剔除作为兜底方案
二、主动更新策略 1.Cache Aside Pattern 旁路缓存模式在更新数据库的同时更新缓存 2.Read/Write Through Pattern 读写穿透模式缓存与数据库整合为一个服务由服务来维护一致性。调用者调用该服务无需关心缓存一致性问题 3.Write Behind Caching Pattern 异步缓存写入模式调用者只操作缓存由其它线程异步的将缓存数据持久化到数据库保证最终一致
三、Cache Aside Pattern
3.1 删除缓存还是更新缓存? 1.每次更新数据库都更新缓存无效的写操作较多 2.更新数据库让缓存失效查询时再更新缓存更好
3.2 如何保证缓存与数据库的操作同时成功或失败 1.单体系统中将缓存和数据库操作放在同一个事务中 2.分布式系统利用TCC (Try、Confirm、Cancel)等分布式事务方案
3.3 先操作缓存还是先操作数据库 1.先删缓存再删数据库 2.先删数据库再删缓存 3.先删数据库再删缓存比较好这种发生的概率相对来说小一点然后给缓存加上一个过期时间一旦不一致时缓存失效也再次查询数据库
3.3.1 先删缓存再删库 正常情况示例 1.有线程A和线程B操作缓存和数据库 2.线程A想把姓名改为张三先删缓存然后更新数据库姓名是张三执行完毕 3.线程B查询缓存未命中查询数据库将张三写入缓存拿到张三 4.此时数据库和缓存的数据都是张三 异常情况示例 1.有线程A和线程B操作缓存和数据库 2.线程A想把姓名李四改为张三先删缓存删除缓存成功准备更新数据库为张三3.线程B开始查缓存未命中查询数据库为李四将李四写入缓存执行完毕 4.线程A更新数据库为张三成功执行完毕 5.此时数据库数据为张三但缓存是李四
3.3.2 先删库再删缓存 正常情况示例 1.有线程A和线程B操作缓存和数据库 2.线程A想把姓名李四改为张三先更新数据库姓名改为张三删除缓存执行完毕 3.线程B查询缓存未命中查询数据库将张三写入缓存拿到张三 4.此时数据库和缓存的数据都是张三 异常情况示例 1.有线程A和线程B操作缓存和数据库 2.线程B查询缓存未命中查询数据库拿到李四还没来的及写入缓存 3.线程A想把姓名李四改为张三先更新数据库姓名改为张三删除缓存执行完毕 4.线程B将李四写入缓存执行完毕 5.此时数据库数据为张三缓存为李四