如何保持缓存与数据库同步?

She*_*hav 2 java spring-mvc ehcache

我们有定期更新的数据库。我正在使用 ehcache 和 mysql 数据库。

现在,一旦数据库更新,我们需要根据更新从数据库中提取一些信息并将其发布到缓存。

  1. 我应该如何使我的数据库与缓存同步(缓存应该随着数据库更新而更新)?
  2. 我应该如何知道数据库何时更新?

Lou*_*met 7

这是缓存引入的经典问题。当您复制数据(在数据库和缓存中)时,就会引入一致性问题。

这个问题没有唯一的答案。

对于 1,答案取决于防止从缓存中提供陈旧数据的重要性。在某些情况下,这不是问题,使用较短的到期时间可以解决问题。在其他情况下,您必须在缓存中拥有最新数据,然后您必须确保缓存条目无效。

请注意,以完全安全的方式执行此操作是很困难的,这就是为什么Hibernate 有这么多二级缓存策略,越来越安全,但也越来越慢。

对于问题 2,这完全特定于您的应用程序。如果只有您的应用程序更新数据库,那么您就知道何时使缓存无效。如果数据库是从外部更新的,您将必须让该系统知道您的应用程序——或者至少是缓存——以便它可以发送失效。