缓存与数据库一致性保证

缓存与数据库一致性保证

问题来了:

当数据money发生变化的时候: ①是更新缓存中的数据,还是淘汰缓存中的数据呢? ②是先操纵数据库中的数据再操纵缓存中的数据,还是先操纵缓存中的数据再操纵数据库中的数据呢?

更新缓存 VS 淘汰缓存

问:数据变化时,到底是选择更新缓存还是淘汰缓存?

答:主要取决于更新缓存的复杂度。

  • 更新缓存的代价很小,此时我们应该更倾向于更新缓存,以保证更高的缓存命中率
  • 如果余额是通过很复杂的数据计算得出来的,倾向于删除缓存。
  • 淘汰缓存操作简单,并且带来的副作用只是增加了一次cache miss,建议作为通用的处理方式。

先操作数据库 vs 先操作缓存

当写操作发生时,假设淘汰缓存作为对缓存通用的处理方式,又面临两种抉择: ①先写数据库,再删除缓存。 ②先删除缓存,再写数据库。

我们究竟采用哪种时序呢?

  • 对于一个不能保证事务性的操作,一定涉及“哪个任务先做,哪个任务后做”的问题。
  • 解决这个问题的方向是:如果出现不一致,谁先做对业务的影响较小,就谁先执行。
  • 思考:两者谁先执行的影响最小?

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注