网站内容更新策略( 几种分布式更新策略:JAVA面试题中常见的两种两种考题)

优采云 发布时间: 2021-12-24 23:19

  网站内容更新策略(

几种分布式更新策略:JAVA面试题中常见的两种两种考题)

  

  缓存的引入可以帮助DB降低检索压力,但是如果数据一致性问题处理不好,就会导致读取脏数据的问题

  接下来的两个文章将总结几种分布式缓存更新策略,这也是JAVA面试题中常见的两道考题。我在BAT面试的时候也问过。

  如果更新缓存

  如果删除缓存

  千帆掠过沉舟,万木春在病树前!必要手段

  为了保证数据的一致性,无论缓存如何处理,都应该为缓存设置一个过期时间。这是缓存的必要元素,否则很难保证数据的最终一致性。

  下面讨论的讨论方案是没有设置缓存过期时间的极端讨论。只是为了澄清这个想法,在实际开发过程中应该将过期时间添加到缓存中。

  刷新缓存

  先得出结论:对于数据的变化,缓存不应该同步更新。

  因为:只有被查询数据的数据才建立缓存,才有意义。一条数据只会更新,永远不会被查询或永远不会被查询。建立缓存是一种资源浪费。

  总结一下:建立缓存的操作应该是在读取数据的时候。

  先更新缓存,再更新数据库

  我们先来分析一下。当需要更新缓存时,当数据发生变化时,如果先更新缓存,再更新DB会怎样?

  缓存的来源是数据库。如果先更新缓存,如果查询操作在更新DB之前读取缓存,读取的数据都是脏数据。

  先更新DB,再更新缓存

  如果先更新DB,再更新缓存,会遇到什么问题?在以下场景中,会出现问题:

  第一步:两个线程A和B同时更新DB中的一条数据。A线程先更新DB,然后B更新DB。(此时B的数据是最新的)。步骤 2:接下来,A 和 B 需要更新缓存。由于网络的原因,B发送的缓存更新命令比A先到达。(完全有可能因为A和B是异步的) Step 3:在缓存中间件中,缓存被B(最新数据)更新后才更新by A(旧数据)。因为B的数据是最新的,但是缓存是最后被A更新的,所以此时缓存的数据是脏数据。

  同样是脏数据的问题。

  综上所述

  不设置过期时间,无论是先更新DB还是更新缓存,都非常容易缓存脏数据,不好处理。

  另外,在不需要的时候缓存数据是浪费时间,所以在数据发生变化时不应该更新缓存。

  既然缓存没有更新,就删除缓存,但是是先删除缓存还是先更新数据库呢?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线