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