当前位置: 首页 > news >正文

有没有专门做帽子的网站大学生网站设计作品成品代码

有没有专门做帽子的网站,大学生网站设计作品成品代码,wordpress 七牛插件,本溪做网站延迟双删策略是什么#xff1f; 延迟双删策略是一种保证缓存与数据库数据一致性的方法#xff0c;特别适用于高并发场景下的缓存更新。其核心思想是#xff1a;在更新数据库时#xff0c;不仅删除一次缓存#xff0c;还在短时间后再进行一次延迟删除#xff0c;以避免并…延迟双删策略是什么 延迟双删策略是一种保证缓存与数据库数据一致性的方法特别适用于高并发场景下的缓存更新。其核心思想是在更新数据库时不仅删除一次缓存还在短时间后再进行一次延迟删除以避免并发问题导致的数据不一致。 延迟双删策略的步骤 第一次删除缓存在更新数据库之前先删除对应的缓存确保缓存中不会存在旧数据。更新数据库执行数据库更新操作。延迟一段时间后再次删除缓存为了防止在数据库更新后立即有并发请求读到了旧缓存数据延迟一定时间比如 1 秒后再次删除缓存确保缓存中不存在陈旧的数据。 为什么需要延迟再删一次缓存 在高并发的场景下延迟双删策略可以有效避免以下两种常见的问题 更新数据库后立即有请求查询当某个线程刚更新完数据库在其还未重新更新缓存前有其他线程同时查询到了旧缓存数据。这种情况会导致数据库中的新数据还没被缓存查询到的却是旧数据。脏数据回填缓存由于并发请求的存在数据库更新后有可能缓存还没被删除或者重建导致旧缓存被重新写入。 延迟双删策略的优点 提高数据一致性通过延迟删除可以减少缓存中的陈旧数据避免因并发请求导致的缓存数据与数据库数据不一致的问题。减少缓存更新压力相比于每次数据库更新都立即更新缓存延迟双删避免了频繁的缓存更新请求降低了缓存服务器的压力。简单易实现不需要对现有的缓存系统做太大的修改只需在更新逻辑中加入两次删除操作成本较低。 延迟双删策略的缺点 延迟时间的难以确定延迟多久再删除缓存是一个难点。如果延迟时间太短可能仍然会出现并发问题如果延迟时间太长则可能增加缓存中的陈旧数据存在的时间影响数据一致性。并发高时可能出现不一致即使有延迟双删极端高并发场景下如延迟期间有大量请求访问仍然可能出现数据不一致的情况。比如在延迟时间内有大量读请求仍然会命中旧缓存。多次缓存删除带来额外开销延迟删除缓存意味着每次数据库更新后都要进行两次缓存删除操作虽然可以保证数据一致性但也可能带来额外的性能开销特别是在高并发场景下缓存的删除和重建会增加负载。 延迟双删策略适用场景 延迟双删策略适合于那些需要在高并发环境下保证缓存与数据库一致性的场景特别是在更新操作频繁的系统中比如电商、社交平台等需要对大量缓存数据进行频繁更新的应用场景。 示例 假设我们有一个电商系统当用户下单时库存数据需要更新。延迟双删的实现大致如下 // 更新库存的伪代码 public void updateInventory(String productId, int newInventory) {// 第一次删除缓存cache.delete(productId);// 更新数据库中的库存信息database.updateInventory(productId, newInventory);// 延迟一段时间再删除缓存try {Thread.sleep(1000); // 延迟1秒} catch (InterruptedException e) {e.printStackTrace();}// 再次删除缓存确保数据一致性cache.delete(productId); }基础总结一下但是任然有问题 延迟双删策略通过在数据库更新前和更新后延迟一段时间再次删除缓存有效避免了在并发情况下缓存和数据库数据不一致的问题。虽然它能提高一致性但需要合理设计延迟时间并且在极高并发的场景下仍需考虑其他优化策略。 延迟双删策略无法完全做到强一致性 延迟双删策略虽然能在一定程度上提高缓存与数据库的一致性但它确实无法做到完全一致性特别是在极高并发的情况下。下面是对这一点的详细分析 为什么延迟双删策略不能做到彻底的一致性 延迟时间难以完美把控 延迟时间的设定是策略的核心但它往往很难确定。设定的时间过短可能无法覆盖到并发操作的峰值从而导致旧缓存数据被读取。设定时间过长则会影响系统性能和实时性。对于不同业务场景和流量模式理想的延迟时间往往是动态变化的这使得延迟双删的应用更具挑战性。 高并发场景下的并发写入问题 在极高并发的场景下即使使用延迟双删策略仍可能出现多个线程同时操作缓存和数据库的情况。举个例子 线程 A 在删除缓存后开始更新数据库线程 B 在 A 更新数据库之前查询到了缓存并回填了旧缓存数据线程 A 的延迟删除动作也无法及时清理掉线程 B 填充的旧缓存。 这种情况下会导致缓存中的数据仍然是旧的从而发生不一致。 脏读问题 在延迟删除的这段时间内如果有并发的读取请求可能会读到数据库更新后的旧缓存。这在某些实时性要求高的应用中是不可接受的比如金融系统或订单处理系统必须保证读到的数据是最新的。 网络延迟和异常情况 网络延迟、系统抖动等不确定因素也会影响延迟双删的效果。在分布式系统中延迟双删依赖于多个系统的协作如缓存、数据库、应用服务如果某个环节出现异常如缓存删除失败、网络延迟较大等都可能导致数据不一致。 一致性问题的进一步讨论 严格来说延迟双删策略提供的一致性保证是最终一致性即在一段时间内缓存和数据库的数据可能会出现不一致的情况但在系统恢复到稳定状态时缓存和数据库的数据最终会一致。 强一致性Strict Consistency是指系统中每次读操作都能够获得最近的写操作的结果要求每次数据读取都是最新的。这种一致性在延迟双删策略中是无法保证的。最终一致性Eventual Consistency则意味着经过一段时间后系统的数据会变得一致但在某些瞬间数据可能不一致。延迟双删策略通常保证的是这一类一致性。 替代或补充的优化策略 对于高并发场景或者对一致性要求特别严格的系统延迟双删策略可能不够因此需要引入其他优化策略 分布式锁 在缓存更新时使用分布式锁如 Redis 的 SETNX 加锁机制确保只有一个线程能够更新缓存和数据库避免并发写操作导致的缓存与数据库不一致。 消息队列 使用消息队列进行缓存更新操作将数据库更新后的缓存操作通过消息队列异步处理从而保证顺序性和一致性。 强制缓存更新 对于实时性要求较高的系统可以强制要求在每次读写操作时更新缓存保证缓存和数据库的数据是一致的代价是性能损失更大。 写通过策略Write-through Cache 直接在写入数据库时同步更新缓存这样保证写入数据库的数据也一定进入缓存中避免了缓存中存在旧数据的问题但这增加了写操作的延迟。 读写分离 可以通过数据库主从架构实现读写分离将读取操作主要从缓存或者从库执行减少对主库的压力同时让主库专注于写操作并及时更新缓存。 强一致性的总结 延迟双删策略虽然能在大部分场景下解决缓存与数据库不一致的问题但它并不能保证强一致性尤其是在高并发场景下或对一致性要求较高的系统中。其一致性保证更多的是最终一致性。如果业务系统对一致性要求较高建议引入分布式锁、消息队列等其他优化策略来进一步提升一致性。 问题是为啥要延迟1s呢不延迟可以吗 延迟双删策略的核心目的是避免并发情况下缓存和数据库之间的短暂不一致问题。虽然延迟并不能阻止线程 B 并发操作但它可以帮助我们在一个较短的时间窗口内修正数据的不一致性。我们来详细拆解一下这个问题 问题核心延迟 1 秒的目的 延迟的 1 秒钟确实是为了让数据库的更新有足够的时间被完全写入并提交从而避免因为数据库更新延迟而导致的“脏数据”问题。具体来说延迟 1 秒的主要目的是 避免线程 A 更新数据库后立即读取脏数据如果线程 A 在删除缓存和更新数据库后马上读取数据库可能会因为数据库还没有完全更新而读到旧数据。此时如果缓存再次填充旧数据会导致缓存不一致。延迟 1 秒的目的就是为了给数据库的更新操作留出足够的时间让数据更新在数据库中被真正写入完成。 缓解线程 B 的并发读取问题虽然延迟无法直接阻止线程 B 的并发操作但如果线程 B 恰好在数据库还未更新完成时读取了旧数据并将其重新写入缓存延迟后的第二次删除操作可以确保最终缓存中不会保留这些旧数据。因此延迟 1 秒相当于一个最终修正手段确保在并发场景下旧数据不再保留太长时间。 并发情况下脏数据的问题 如果没有延迟存在以下风险 线程 A 更新数据库时可能存在延迟数据库操作通常是有耗时的尤其是在高并发场景下。如果线程 A 在数据库更新后立即读取缓存可能读到的还是旧数据。如果没有延迟线程 A 可能会直接填充缓存为旧数据。 线程 B 并发读取旧数据在缓存删除和数据库更新之间的时间窗口内线程 B 可能会读取旧的数据库数据并将其重新写入缓存。如果没有延迟进行第二次缓存删除旧数据将会长期存在于缓存中导致缓存与数据库之间的数据不一致。 延迟并不是给线程 B 留的时间而是给数据库写入时间 所以延迟 1 秒的核心并不是为了让线程 B 等待而是为了给数据库足够的时间完成更新并确保缓存中不会保留因为并发读取而填充的旧数据。线程 A 的延迟删除缓存实际上是为了确保即便有线程 B 并发写入了旧数据最终这些旧数据也会被删除从而达到数据的一致性。 脏数据与缓存更新关系 如果线程 A 不进行延迟删除那么在高并发的情况下 数据库更新的速度可能跟不上线程 A 的缓存操作速度导致线程 A 或其他线程读取到未更新的数据脏数据。当并发请求线程 B读取旧数据时这些旧数据会被重新写入缓存导致缓存的数据和数据库中的数据不同步。 通过延迟删除缓存可以确保线程 A 在更新数据库后数据库中的数据有足够的时间更新完成避免脏数据进入缓存。并且即便有其他线程在缓存删除后的短时间内写入旧数据延迟的第二次删除操作也能及时清除这些旧数据。 延迟1 秒的总结 延迟 1 秒的目的是为了给数据库更新操作预留时间确保数据库在并发场景下能正确地完成更新防止线程 A 或线程 B 在数据库还没更新完毕的情况下读取到旧数据。延迟删除缓存不是直接解决并发问题的手段而是通过最终一致性的方式来确保缓存中不会长时间保留旧数据减少缓存与数据库不一致的时间窗口。 如果并发场景特别复杂或者延迟时间难以估计还可以引入其他手段如分布式锁来更加精细地控制缓存和数据库的同步问题。
http://www.w-s-a.com/news/913002/

相关文章:

  • 有没有外包活的网站如何做网站快捷键的元素
  • 公司网站赏析网站制作2019趋势
  • 企业进行网站建设的方式有( )推广引流违法吗
  • 按营销型网站要求重做网站 费用点金网站建设
  • 深圳做网站互联网服务
  • 网站sem托管wordpress安装无法连接数据库
  • 深圳网站建设开发公司哪家好微信小程序商家入口
  • 江门站排名优化建立什么网站赚钱
  • 科普文章在那个网站做招聘网站代做
  • 监控设备东莞网站建设游戏网站域名
  • 对商家而言网站建设的好处网址导航怎么彻底删除
  • app设计网站模板企业展厅策划设计公司有哪些
  • wordpress销售主题手机网站关键词优化
  • 怎么查一个网站是什么程序做的三亚城乡建设局网站
  • 深圳分销网站设计公司做网站一般需要多久
  • 企业网站设计代码丹东seo排名公司
  • 企业网站建设定制开发服务网站建设说课ppt
  • 大连市城乡建设局网站网站免费网站入口
  • 做暧网站网站备案ps
  • 知名网站建设公司电话长子网站建设
  • 网站建设的意义与目的建立什么船籍港
  • 广州注册公司营业执照网站建设代码优化
  • 百度网站官网马克互联网主题 wordpress
  • 网站制作 客户刁难深圳自助建站
  • 怎么去推广一个网站广东餐饮品牌设计
  • 网站代码加密了怎么做兰州最新大事
  • 现在ui做的比较好的网站去年做啥网站致富
  • 广东网站建设咨询电话好牌子网
  • 公司怎样制作网站南阳网站关键词
  • 营销型网站建设与网盟完整php网站开发