默认的 Cache API 实现是用的 EHCache. 你也可以通过插件来提供自己的缓存实现.
访问 Cache API
缓存 API 由 play.api.cache.Cache
对象提供. 它需要注册一个缓存插件.
注: Cache API 尽力保持自身最小化,而允许插入多种实现. 如果你需要一个更具体的 API, 那就通过你自己的缓存插件来使用它.
Unmi 注: EhCachePlugin 的注册方式可以查看 play_x.x.x.jar(比如 $PLAY_HOME/repository/local/play/play_2.9.1/2.0.4/jars/play_2.9.1.jar) 包中的 play.plugins 中的内容:
1 2 3 4 5 6 7 8 |
100:play.api.i18n.MessagesPlugin 200:play.api.db.BoneCPPlugin 300:play.db.ebean.EbeanPlugin 400:play.db.jpa.JPAPlugin 500:play.api.db.evolutions.EvolutionsPlugin 600:play.api.cache.EhCachePlugin 1000:play.api.libs.concurrent.AkkaPlugin 10000:play.api.GlobalPlugin |
这是 Play2.0.4 默认注册的插件,其中就包含了 600:play.api.cache.EhCachePlugin 插件。
使用下面简单的 API,你就可以往缓存中存数据了:
1 |
Cache.set("item.key", connectedUser) |
之后获取它:
1 |
val maybeUser: Option[User] = Cache.getAs[User]("item.key") |
当缓存数据不存在时,还有一个帮助方法在你获取或设置缓存数据给你带来了便利:
1 2 3 |
val user: User = Cache.getOrElseAs[User]("item.key") { User.findById(connectedUser) } |
缓存 HTTP 响应数据
你可以用标准的 Action 组合简单的创建一个聪明的具体缓存特性的 Action.
注: Play HTTP
Result
实例可安全的被缓存并被重用.
Play 提供了默认, 内建的方式来应对标准的情况:
1 2 3 4 5 |
def index = Cached("homePage") { Action { Ok("Hello world") } } |
或者甚至是这样:
1 2 3 4 5 6 7 |
def userProfile = Authenticated { user => Cached(req => "profile." + user) { Action { Ok(views.html.profile(User.find(user))) } } } |
本文链接 https://yanbin.blog/play2-0-tutorials-cn-cache-api/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。