Caching 从缓存播放框架凝胶列表

Caching 从缓存播放框架凝胶列表,caching,playframework,Caching,Playframework,通过控制器,我向缓存发送一个java列表 @for(index <- play.api.cache.Cache.get("nrOfmessages")){ <h1>@index</h1> } @for(index不要使用缓存来存储数据,因为缓存不会一直保留,您可能会得到空值 从 重要的是要了解缓存契约是明确的:何时 你把数据放在缓存中,你不能期望数据留在那里 永远。事实上你不应该。缓存很快,但值过期, 而且缓存通常只存在于内存中(没有持久性) 备份) 从 播放是无

通过控制器,我向缓存发送一个java列表
@for(index <- play.api.cache.Cache.get("nrOfmessages")){
<h1>@index</h1>
}

@for(index不要使用缓存来存储数据,因为缓存不会一直保留,您可能会得到空值

重要的是要了解缓存契约是明确的:何时 你把数据放在缓存中,你不能期望数据留在那里 永远。事实上你不应该。缓存很快,但值过期, 而且缓存通常只存在于内存中(没有持久性) 备份)

播放是无状态的,不应将缓存用作数据存储。如果 您正在进行负载平衡,无法保证您将返回到 相同的服务器。通过将内容保留在内存中,您正在破坏 播放的无状态特性。缓存最好在数据已经存在时使用 存在于数据库中,但用于将频繁的 数据库读取

解决方案1:将列表传递给您的视图

在控制器中

公共静态结果索引(){
列表消息=新建ArrayList();
消息。添加(“消息1”);
消息。添加(“消息2”);
消息。添加(“消息3”);
返回ok(index.render(message));
}
在你看来

@(消息:列表[字符串])
@主要(“索引”){

@for(msg)很遗憾,我无法通过模板函数传递变量,因为我已经在其他情况下使用过它。@Michal如果您不想传递变量,也不想使用会话,那么您可以选择使用ajax调用和直接调用模型函数(参见我的编辑)。将变量存储在缓存中不是一个好的做法,对您的项目的未来也不好,因为页面可能会崩溃。这是一个非常好的提示…我完全忘记了ajax的存在thx很多:)@Michal您是否尝试过解决方案2
,从我的回答中会更简单谢谢您的帮助…User.all()-这是控制器提供的方法?我想我不能使用它,因为在这种情况下,我应该使用反向路由…你能说得更多吗?一些示例将非常有用:d
public static Result index() {
        List<String> message= new ArrayList<String>(); 
        message.add("message1");
        message.add("message2");
        message.add("message3");
        return ok(index.render(message));
    }
@(messages:List[String])

@main("index"){

@for(msg <- messages){
<div>@msg</div>
}

}
@for(user<- User.all()){
<div>@user.getName</div>
}