Where communities thrive

  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
Repo info
  • May 21 07:33

    mergify[bot] on master

    Update cats-effect, cats-effect… Merge pull request #680 from sc… (compare)

  • May 21 07:33
    mergify[bot] closed #680
  • May 21 07:29
    scala-steward opened #680
  • May 20 04:19
    scala-steward opened #679
  • May 20 01:12
    scala-steward opened #678
  • May 14 16:09
    scala-steward closed #676
  • May 14 16:08
    scala-steward commented #676
  • May 14 16:08
    scala-steward opened #677
  • May 06 15:08
    niij commented #568
  • Apr 30 13:10
    scala-steward closed #673
  • Apr 30 13:10
    scala-steward commented #673
  • Apr 30 13:10
    scala-steward opened #676
  • Apr 28 04:05
    scala-steward opened #675
  • Apr 25 07:20

    mergify[bot] on master

    Update scalatest to 3.2.12 Merge pull request #674 from sc… (compare)

  • Apr 25 07:20
    mergify[bot] closed #674
  • Apr 25 07:15
    scala-steward opened #674
  • Apr 16 12:07
    scala-steward closed #668
  • Apr 16 12:07
    scala-steward commented #668
  • Apr 16 12:07
    scala-steward opened #673
  • Apr 12 16:18
    scala-steward closed #651
Leo De Souza
Hi all, I am new to Scalacache lib. I am looking for a good introduction to it using Caffeine underlining cache. Any suggestion for an introductory post? I checked the documentation (https://cb372.github.io/scalacache/docs/) but it is quite poor tbh :( For example, which Sbt libs I need to include to support the diff Modes as per "scalacache.modes.try."?
Ashwin Bhaskar
is there an integration of scalacache with ZIO?
if not, any pointers on how I should go about building a Mode for ZIO effects ?

Hi! If I use caffeine cache with expireAfterWrite set, not sure how the ttl param would behave in cachingF?

private val underlyingCaffeineCache = Caffeine.newBuilder()
.expireAfterWrite(60, TimeUnit.SECONDS)
.buildString, Entry[T]

implicit val caffeineCache: Cache[T] = CaffeineCache(underlyingCaffeineCache)



Hi Team,
We are using below library dependencies in our scala App:

"com.github.cb372" %% "scalacache-redis" % "0.28.0", "com.github.cb372" %% "scalacache-cats-effect" % "0.28.0"

We are planning to upgrade our scala app from 2.12 to 3.0.0. Are there any plans from scalacache's end to release next version compatible with scala 3 ?

Jason Cohen
import scalacache.memoization._
import scala.concurrent.duration._
import scalacache.caffeine._
import scala.concurrent.Future

implicit val cache: CaffeineCache[String] = CaffeineCache[String]

import scalacache.modes.scalaFuture._
import scala.concurrent.ExecutionContext.Implicits.global

def memFut(s: String): Future[String] = memoize(Option(30.seconds)) {
  Future(s) // I want to be able to cache an async call here
1 reply
I tried the above based on the examples to memoize an async call that returns a future. The compiler complains that my method needs to return just a string. How can I memoize a method that returns a Future[A] ?
I also tried instantiating cache as CaffeineCache[Future[String]]
Does anyone know when will lib "scalacache-redis” have scala3 support ?
@danveer4686 I had a stab at providing scala 3 support in a pr, but the repo doesn't look super active right now. Might be worth looking at my branch, but I'm using it pretty simply so there may be something broken that I missed...
Albert Bikeev
Hi all!
Could somebody help me to find a way to invalidate the cache? For memoized method
Deepika H

Hi all.

Is there a way to retrieve all the keys in the cache using scalaCache-guava

Darren Bishop
hi folks. just doing a bit of investigation into whether ScalaCache and some backup can be used for a couple of our use-cases
  1. is it possible to get back nothing e.g. None on a cache-miss i.e. conditional caching? would prefer not to populate the cache with None myself
  2. is it possible to query the cache (do a get) without updating/refreshing the TTL i.e. conditional refreshing, TTL-checking?
Roberto Leibman

Though I've used scalacache for quite a while now, I'm having issues with a cache that is being hit by multiple threads at a time. Is there any synchronization I need to provide or anything like that?
I simply do:

cachingF("TenantTransactor", serverIndex)(None) { /*code here*/ }

And I see multiple misses for the same key before I finally get an insertion:

2021-09-20 16:56:01,051 [DEBUG] from scalacache.caffeine.CaffeineCache in zio-default-async-14 - Cache miss for key TenantTransactor:0
2021-09-20 16:56:01,204 [DEBUG] from scalacache.caffeine.CaffeineCache in zio-default-async-5 - Cache miss for key TenantTransactor:0
2021-09-20 16:56:01,389 [DEBUG] from scalacache.caffeine.CaffeineCache in zio-default-async-11 - Cache miss for key TenantTransactor:0
2021-09-20 16:56:01,748 [DEBUG] from scalacache.caffeine.CaffeineCache in zio-default-async-7 - Cache miss for key TenantTransactor:0
2021-09-20 16:56:01,923 [DEBUG] from scalacache.caffeine.CaffeineCache in zio-default-async-2 - Cache miss for key TenantTransactor:0
2021-09-20 16:56:02,102 [DEBUG] from scalacache.caffeine.CaffeineCache in zio-default-async-14 - Inserted value into cache with key TenantTransactor:0
2021-09-20 16:56:02,102 [DEBUG] from scalacache.caffeine.CaffeineCache in zio-default-async-19 - Cache hit for key TenantTransactor:0
What could I be missing?
Roberto Leibman
For what it's worth I'm using my own custom spun zio mode, but I tried with cats mode and with sync and they all do the same thing.
Per Øyvind Kanestrøm
Hi! Would it be possible to do another milestone release with the expiration fixes? :)
plus one to that! :)
With 1.0.0 branch updated to M4 (with CE 3 support since M3), I'm trying to migrate to M4. Is there a migration guide for v1? I'm seeing the cats-effect module is gone (looks like it's being integrated into core) and Mode is also MIA.... Does it mean now CE is the only supported effect runtime?
Ruixi Fan
@voonchav_gitlab you can eliminate the dependency of scalacache-cats-effect. Now it is part of core. I just migrated to 1.0.0-M4.
hello. Is there any indication on when 1.0.0 will be made a final release and move away from milestone releases?

Trying to use scalacache for the first time, I think that I follow the documentation scrupulously but I have an error related to implicit. Does somebody can help on this? Thanks

scala> import scalacache._
     | import scalacache.caffeine._
     | import com.github.benmanes.caffeine.cache.Caffeine
     | import java.util.concurrent.TimeUnit
     | val underlying = Caffeine
     |     .newBuilder()
     |     .expireAfterWrite(1, TimeUnit.HOURS)
     |     .maximumSize(100)
     |     .build[Int, Entry[String]]()
     | val cache = CaffeineCache(underlying)
       val cache = CaffeineCache(underlying)
On line 12: error: overloaded method apply with alternatives:
         [V](underlying: com.github.benmanes.caffeine.cache.Cache[String,scalacache.Entry[V]])(implicit config: scalacache.CacheConfig): scalacache.caffeine.CaffeineCache[V] <and>
         [V](implicit config: scalacache.CacheConfig): scalacache.caffeine.CaffeineCache[V]
        cannot be applied to (com.github.benmanes.caffeine.cache.Cache[Int,scalacache.Entry[String]])

scalacache version is 0.28.0
java 8

2 replies
Albert Bikeev
Hi all,
Is there a way to make sure cache was used? I use Guava cache implementation and I can see it has underlying stats, is it the metric I should be looking for or there is a better way?
Thank you!
Albert Bikeev
Because I have only cache-misses for the following implementation... Is it because of the way I use Cats.IO (even tho val cache is a eager and non-IO...) Or it's related to my CacheOpts wrapper? Any help appreciated :slight_smile:
case class CacheOpts[T, F[_]](ttl: Option[Duration], cache: Cache[T], mode: Mode[F], flags: Flags)

object CacheOpts {
    def asyncGuava[T, F[_]: Async](ttl: Option[Duration]): CacheOpts[T, F, GuavaCache[T]] = CacheOpts(

class Test {
    val cache = CacheOpts.asyncGuava[OtherClass](100.seconds)

    def doIt(useCache: Boolean) = 
        if (useCache) OtherClass.heavyRequestMemo
        else OtherClass.heavyRequest

object OtherClass {

    def heavyRequestMemo(@cacheKeyExclude cacheOpts: CacheOpts[GithubSource, IO])(otherParams: Int): IO[OtherClass] = 
        memoizeF(cacheOpts.ttl) {
        }(cacheOpts.cache, cacheOpts.mode, cacheOpts.flags)
1 reply
Albert Bikeev
Nevermind, I missed that TTL was too short :expressionless:
Agustín Liébana

I'm trying to override logCacheHitOrMiss to generate some metrics but I'm having the following problem when compiling:
"incompatible type in overriding
[error] protected def jedisPool: redis.clients.util.Pool[CustomRedisCache.this.JClient] (defined in trait RedisCacheBase)
[error] with val jedisPool: redis.clients.jedis.JedisPool (defined in class RedisCache);
[error] found : redis.clients.jedis.JedisPool
[error] required: redis.clients.util.Pool[CustomRedisCache.this.JClient]
[error] (which expands to) redis.clients.util.Pool[redis.clients.jedis.Jedis];"

any idea how to solve this?

Agustín Liébana
nvm, was a problem with Jedis version.