Java 如何保持缓存与数据库同步?
我们有定期更新的数据库。我正在使用ehcache和mysql数据库 现在,一旦数据库更新,我们需要根据更新从数据库中提取一些信息,并将其发布到缓存中Java 如何保持缓存与数据库同步?,java,spring-mvc,ehcache,Java,Spring Mvc,Ehcache,我们有定期更新的数据库。我正在使用ehcache和mysql数据库 现在,一旦数据库更新,我们需要根据更新从数据库中提取一些信息,并将其发布到缓存中 如何使数据库与缓存保持同步(缓存应随着数据库更新而更新) 如何知道数据库何时更新 这是缓存引入的经典问题。在数据库和缓存中复制数据的那一刻,就引入了一致性问题 这个问题没有单一的答案 对于1,答案取决于防止从缓存提供过时数据的重要性。在某些情况下,这不是问题,使用较短的到期时间可以解决问题。在其他情况下,缓存中必须有最新数据,然后必须确保缓存项无效
这是缓存引入的经典问题。在数据库和缓存中复制数据的那一刻,就引入了一致性问题 这个问题没有单一的答案 对于1,答案取决于防止从缓存提供过时数据的重要性。在某些情况下,这不是问题,使用较短的到期时间可以解决问题。在其他情况下,缓存中必须有最新数据,然后必须确保缓存项无效 请注意,以完全安全的方式进行此操作很难,这就是为什么,越来越安全,但也越来越慢
对于问题2,这通常针对您的应用程序。如果只有您的应用程序更新数据库,那么您就知道何时使缓存无效。如果数据库是在外部更新的,那么您必须让该系统知道您的应用程序——或者至少是缓存——以便它可以发送无效信息 有多种方法可以将缓存与数据库同步,但这取决于您使用的缓存。 在分布式缓存中,以下是确保缓存中数据有效的方法
数据库是通过同一个应用程序更新的,还是通过不同的应用程序更新的,还是直接在数据库中更新的?如果是同一个应用程序,那么您知道数据库何时更新。但是我应该如何使我的数据库与ehcache保持同步?我想您指的是ehcache与数据库同步。当您知道数据库将要更新时,请刷新缓存。如果您使用的是spring注释,@CachePut或@cacheexecute可能会有所帮助。您可以提供示例代码吗?