我有 2 个网络应用程序,一个管理网络应用程序,以及实际的应用程序网络应用程序本身。两者共享对 mysql 存储的访问,Ehcache 用于缓存用户详细信息,以防止每个 REST API 请求对后端的用户查找命中。
我遇到的问题是可以使用管理应用程序(我很少添加)来更新用户凭据,比如说密码或用户名,或者更改一些授权级别等。现在当发生这种情况时,我需要用户使缓存失效或清除,以便主 web 应用程序可以在用户查找时访问数据库,将新用户的详细信息放入缓存中。
目前会发生这种情况,但缓存的清除对于主客户端 web 应用程序是不可见的。
如何在两个 web 应用程序之间共享一个 ehcache(同时托管在 jetty 或 tomcat 中)?我目前正在使用 Jetty,但打算切换到 Tomcat。
我正在使用 Spring 3、Jersey、Hibernate、MySQL 和 Google Ehcache 注释。
感谢您的帮助。
最佳答案
这里有几个选项:
- 您可以使用 JGroups将您的应用程序加入一个通知 组,然后通知特定的缓存条目 更新/失效。因此,在收到此类通知后,您的主要 Web 应用程序将更新其本地 EhCache 条目。
- 您可以添加Terracotta分布式缓存作为 EhCache 实现(它实际上并没有改变你的代码,因为它只是 插入 EhCache API 后面)。然后你的 EhCache 变成分布式的,所以 在您的管理 Web 应用程序中所做的更改对您的实际用户可见 网络应用程序。 注意: Terracotta 需要商业许可。
- 您可以使用 MemCached 而不是使用 EhCache允许
在多个应用程序之间有一个共同的缓存。所以你的改变 管理网络应用程序对您的实际网络应用程序可见。参见 MemCached
tutorial
关于web-applications - 在两个 webapps 之间共享 Ehcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275370/