我正在使用Play 2.5.4。我刚开始使用CacheAPI来存储当前登录的用户,因为在页面请求中需要多次。我通过cache.set()将此对象添加到缓存中。我的工作很好。
问题是,如果我将此用户对象更新为具有来自管理员帐户的不同权限或角色,我需要使该用户的该缓存对象无效,以便用户可以获得适当的权限或角色。 / p>
如何为用户完成更新缓存? 如何跨多个Web服务器执行此操作?
感谢您的帮助!
答案 0 :(得分:1)
如何为用户完成更新缓存?
您只需再次添加即可。假设您使用用户ID作为密钥
cache.set(user.getId(), user);
如何跨多个Web服务器执行此操作?
现在这是一个完全不同的问题。默认播放使用EhCache作为缓存提供程序,默认情况下Play Cache api不会创建分布式缓存。
我对EhCache没有多少知识,但我认为它支持不同产品中的分布式缓存(即多个服务器之间的缓存),并且它还支持复制。所以你可能想先调查一下,看看它是否适合你。
您还可以创建Cache API的实现,并使用EhCache / Terracota / Memcached / HazelCast来提供您需要的设置。
另一种选择是使用类似Akka Clustering / PubSub扩展名的东西并处理缓存失效(即:使服务器1中的缓存无效 - >每个服务器的广播消息也使该缓存无效)。除非你对Akka和PubSub扩展感到满意,否则这可能很难实现。
作为最后的手段,如果你能负担得起,你可以设置一些短暂的过期时间(例如:1分钟)。这是最简单的方法,如果你能承受你的应用程序在过期时间内看到过时的对象,最多