日期:2014-05-20  浏览次数:20846 次

Play framework 2.0 -使用缓存

?

#Play缓存API

?

在现代应用程序中缓存数据是典型的优化方式,所以Play提供了一个全局缓存。缓存有一点很重要,存储在缓存中的数据可能会丢失。

对存储在缓存中的任意数据,生成策略需要落实到数据丢失的情况下。这个理念是Play的基础理念,不同与JAVA EE,JAVA EE中会话

值要在它的整个生命周期保存。

默认的缓存API实现使用EHCache。你也可以通过插件实现自己的缓存。

?

1.访问缓存API

?

play.cache.Cache对象提供了缓存API。这需要注册一个缓存插件。

这个API刻意做的很小用以运行各种实现被加入。如果你需要一个更具体的API,就使用你的缓存插件提供的API。

在缓存中存储数据:

Cache.set("item.key", frontPageNews);
?

获取到缓存中的数据:

News news = Cache.get("item.key");

?

2.缓存HTTP请求

?

你可以使用标准的Acti组件轻易的创建一个优秀的缓存Action。Play的HTTP result实例的存储是安全的,并且之后可以重用。

Play为标准的用例提供了一个默认的内建助手。

 @Cached("homePage")
	public static Result index() {
	  return ok("Hello world");
	}
?

?

3.缓存到模板中

?

你也可以在视图模板中获取到缓存:

 @cache.Cache.getOrElse("cached-content", 3600) {
	     <div>I’m cached for an hour</div>
	}
?

?

4.会话缓存

?

Play提供了一个全局缓存,它的数据可以随意访问。如何限制某个特定的用户的所见?

比如说,你或许想要缓存某个特定用户适用的指标。

 // Generate a unique ID
	String uuid=session("uuid");
	if(uuid==null) {
		uuid=java.util.UUID.randomUUID().toString();
		session("uuid", uuid);
	}

	// Access the cache
	News userNews = Cache.get(uuid+"item.key");
	if(userNews==null) {
		userNews = generateNews(uuid);
		Cache.set(uuid+"item.key", userNews );
	}