Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保持缓存与数据库同步?_Java_Spring Mvc_Ehcache - Fatal编程技术网

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

Java 如何保持缓存与数据库同步?,java,spring-mvc,ehcache,Java,Spring Mvc,Ehcache,我们有定期更新的数据库。我正在使用ehcache和mysql数据库 现在,一旦数据库更新,我们需要根据更新从数据库中提取一些信息,并将其发布到缓存中 如何使数据库与缓存保持同步(缓存应随着数据库更新而更新) 如何知道数据库何时更新 这是缓存引入的经典问题。在数据库和缓存中复制数据的那一刻,就引入了一致性问题 这个问题没有单一的答案 对于1,答案取决于防止从缓存提供过时数据的重要性。在某些情况下,这不是问题,使用较短的到期时间可以解决问题。在其他情况下,缓存中必须有最新数据,然后必须确保缓存项无效

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

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

  • 如何使数据库与缓存保持同步(缓存应随着数据库更新而更新)
  • 如何知道数据库何时更新

  • 这是缓存引入的经典问题。在数据库和缓存中复制数据的那一刻,就引入了一致性问题

    这个问题没有单一的答案

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

    请注意,以完全安全的方式进行此操作很难,这就是为什么,越来越安全,但也越来越慢


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

    有多种方法可以将缓存与数据库同步,但这取决于您使用的缓存。 在分布式缓存中,以下是确保缓存中数据有效的方法

  • 使用过期(仍然无法保证数据有效性)(Redis支持的功能, NCache、Apache Ignite…)
  • 使用SQL、Oracle依赖关系(NCache支持的功能)
  • 使用基于通知的自定义依赖项(如Cosmos和mongo db)提供数据库更改通知(NCache支持的功能)

  • 数据库是通过同一个应用程序更新的,还是通过不同的应用程序更新的,还是直接在数据库中更新的?如果是同一个应用程序,那么您知道数据库何时更新。但是我应该如何使我的数据库与ehcache保持同步?我想您指的是ehcache与数据库同步。当您知道数据库将要更新时,请刷新缓存。如果您使用的是spring注释,@CachePut或@cacheexecute可能会有所帮助。您可以提供示例代码吗?