Playframework 播放-在请求之间共享对象,无需持久性

Playframework 播放-在请求之间共享对象,无需持久性,playframework,Playframework,在我的Play应用程序中,我需要在几个请求之间共享一些对象,但不需要任何类型的长期持久性。这些东西太大了,不能塞进饼干里。我可以将它们序列化到关系数据库中,但这对我的需求来说似乎很沉重:可以说“让这个对象保持10分钟,让所有线程都可以访问它,然后扔掉它” 我怎样才能做到这一点呢?谷歌番石榴系列非常符合您的要求。您可以创建过期的内存缓存。链接中的示例: LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() .max

在我的Play应用程序中,我需要在几个请求之间共享一些对象,但不需要任何类型的长期持久性。这些东西太大了,不能塞进饼干里。我可以将它们序列化到关系数据库中,但这对我的需求来说似乎很沉重:可以说“让这个对象保持10分钟,让所有线程都可以访问它,然后扔掉它”


我怎样才能做到这一点呢?

谷歌番石榴系列非常符合您的要求。您可以创建过期的内存缓存。链接中的示例:

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
   .maximumSize(1000)
   .expireAfterWrite(10, TimeUnit.MINUTES)
   .removalListener(MY_LISTENER)
   .build(
       new CacheLoader<Key, Graph>() {
         public Graph load(Key key) throws AnyException {
           return createExpensiveGraph(key);
         }
       });
LoadingCache-graphs=CacheBuilder.newBuilder()
.最大尺寸(1000)
.expireAfterWrite(10,时间单位:分钟)
.removalListener(我的侦听器)
.建造(
新缓存加载程序(){
公共图加载(键)引发任何异常{
返回createExpensiveGraph(键);
}
});

或者,您可以自己实现缓存。

Play的缓存API已经足够了。它使用EHCache(内存缓存)作为默认实现

播放Scala:

import play.api.cache.Cache

val hugeList: List[String] = ...

Cache.set("keyName", hugeList, 600) // Caches `hugeList` as "keyName" for 10 minutes (600 seconds)

Cache.getAs[List[String]]("keyName") // Returns `Option[List[String]]` with the value if "keyName" is cached, otherwise `None`.

Cache.remove("keyName") // Removes this key from the cache.
玩Java:

import play.cache.Cache;

Cache.set("keyName", hugeList, 600); // Works exactly the same as the scala version.

Cache.get("keyName");  // Returns the cached value or `null`.

Cache.remove("keyName");  // Same as scala version.
还要确保在
build.sbt
build.scala
中包含
cache
libraryDependencies


API文档:,。

这基本上描述了缓存:我研究了缓存——我不知道一个对象可以保存多长时间。我怎么知道它会在10分钟内出现?使用
Cache.set
,您可以将TTL设置为您想要的任何值。答案很好!如果我能接受两个,我会的。我接受第一种方法是因为它是内置的,但这显然也是一种强大而简单的方法。