我用的是Play 2.5.4。我刚刚开始使用CacheAPI来存储当前登录的用户,因为它在页面请求上需要多次。我通过cache.set()将这个对象添加到缓存中。我把这个做得很好。
问题是,如果我更新此用户对象以具有管理员帐户的不同权限或角色,则需要使该用户的缓存对象失效,以便用户能够获得适当的权限或角色。
如何为用户完成对缓存的更新?我如何在多个web服务器上做到这一点?
谢谢你的帮助!
发布于 2016-08-10 14:30:12
如何为用户完成对缓存的更新?
再加一次就行了。假设您使用的是用户id作为密钥
cache.set(user.getId(), user);我如何在多个web服务器上做到这一点?
这是一个完全不同的问题。Play默认使用EhCache作为缓存提供程序,而Play cache api默认不会创建分布式缓存。
我对EhCache不太了解,但我认为它支持不同产品中的分布式缓存(即多个服务器之间的缓存),而且还支持复制。所以你可能想先调查一下,看看是否适合你。
您还可以创建缓存API的实现,并使用EhCache/Terracota/Memcached/HazelCast提供所需的设置。
另一种选择是使用类似Akka集群/PubSub扩展的内容,并处理缓存失效(即:使服务器1->广播消息中的缓存失效,从而使该缓存失效)。除非您对Akka和PubSub扩展感到满意,否则这可能很难实现。
作为最后的手段,如果您能够负担得起,您只需设置一些短的过期时间(例如:1分钟)缓存。这是最简单的方法,如果您能够负担得起,您的应用程序最多只能看到过期的对象。
https://stackoverflow.com/questions/38862316
复制相似问题