Scalacache 从使用 memoizeF 设置的缓存中删除
Scalacache delete from cache set up with memoizeF
我将 CaffeineCache 与 memoizeF
一起使用来缓存将案例 class 作为输入的操作结果,如下所示:
case class Foo(id: UUID, bar: String)
implicit val myCache: CaffeineCache[Foo] =
buildCache(cacheConfig.size) //builds the CaffeineCache
def cachedOperation(foo: Foo): Future[Foo] =
memoizeF(cacheConfig.duration) {
// do something with foo and return it
}
现在,在某些情况下,我需要明确地从缓存中删除特定元素。
我想我可以使用 myCache.doRemove(key)
但从我在 ScalaCache 文档中看到的情况来看,当使用 memoizeF
时,密钥将从 class 生成 "名称,封闭方法的名称以及所有方法参数的值,我不认为从中进行后向工程key
并将其与doRemove
一起使用是好主意。
如果某个元素是使用 memoizeF
插入的,是否还有其他方法可以从缓存中删除该元素?或者,我能否以某种方式告诉 memoizeF
使用 Foo 中的 id
作为键而不是从 class 名称等生成它(我确定 id
s 对于每个 Foo 实例都是唯一的)?
也许使用 memoizeF
对于这种情况根本不是一个好主意,我应该回到“手动”插入缓存?任何输入表示赞赏。我查看了官方文档并在谷歌上搜索,但一无所获。
Cache[F[_], V]
特征具有明确的 caching
方法,您可以在其中指定缓存键:https://github.com/cb372/scalacache/blob/master/modules/core/src/main/scala/scalacache/CacheAlg.scala#L56
所以你可以这样做:
case class Foo(id: UUID, bar: String)
val myCache: CaffeineCache[Foo] = buildCache(cacheConfig.size) //builds the CaffeineCache
def cachedOperation(foo: Foo): Future[Foo] =
myCache.caching(foo)(cacheConfig.duration) {
// do something with foo and return it
}
def removeCache(foo: Foo): Future[Unit] = myCache.remove(foo)
我将 CaffeineCache 与 memoizeF
一起使用来缓存将案例 class 作为输入的操作结果,如下所示:
case class Foo(id: UUID, bar: String)
implicit val myCache: CaffeineCache[Foo] =
buildCache(cacheConfig.size) //builds the CaffeineCache
def cachedOperation(foo: Foo): Future[Foo] =
memoizeF(cacheConfig.duration) {
// do something with foo and return it
}
现在,在某些情况下,我需要明确地从缓存中删除特定元素。
我想我可以使用 myCache.doRemove(key)
但从我在 ScalaCache 文档中看到的情况来看,当使用 memoizeF
时,密钥将从 class 生成 "名称,封闭方法的名称以及所有方法参数的值,我不认为从中进行后向工程key
并将其与doRemove
一起使用是好主意。
如果某个元素是使用 memoizeF
插入的,是否还有其他方法可以从缓存中删除该元素?或者,我能否以某种方式告诉 memoizeF
使用 Foo 中的 id
作为键而不是从 class 名称等生成它(我确定 id
s 对于每个 Foo 实例都是唯一的)?
也许使用 memoizeF
对于这种情况根本不是一个好主意,我应该回到“手动”插入缓存?任何输入表示赞赏。我查看了官方文档并在谷歌上搜索,但一无所获。
Cache[F[_], V]
特征具有明确的 caching
方法,您可以在其中指定缓存键:https://github.com/cb372/scalacache/blob/master/modules/core/src/main/scala/scalacache/CacheAlg.scala#L56
所以你可以这样做:
case class Foo(id: UUID, bar: String)
val myCache: CaffeineCache[Foo] = buildCache(cacheConfig.size) //builds the CaffeineCache
def cachedOperation(foo: Foo): Future[Foo] =
myCache.caching(foo)(cacheConfig.duration) {
// do something with foo and return it
}
def removeCache(foo: Foo): Future[Unit] = myCache.remove(foo)