玩2.5+和CacheAPI

时间:2016-08-10 00:09:40

标签: playframework

我正在使用Play 2.5.4。我刚开始使用CacheAPI来存储当前登录的用户,因为在页面请求中需要多次。我通过cache.set()将此对象添加到缓存中。我的工作很好。

问题是,如果我将此用户对象更新为具有来自管理员帐户的不同权限或角色,我需要使该用户的该缓存对象无效,以便用户可以获得适当的权限或角色。 / p>

如何为用户完成更新缓存? 如何跨多个Web服务器执行此操作?

感谢您的帮助!

1 个答案:

答案 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分钟)。这是最简单的方法,如果你能承受你的应用程序在过期时间内看到过时的对象,最多