Where communities thrive

  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
Repo info
  • Mar 23 03:54
    kubukoz commented #345
  • Mar 23 02:32
    lewisjkl commented #345
  • Mar 22 19:16

    cb372 on cb372


  • Mar 22 19:16

    cb372 on master

    Mergify: configuration update Merge pull request #369 from cb… (compare)

  • Mar 22 19:16
    cb372 closed #369
  • Mar 22 19:00
    kubukoz synchronize #345
  • Mar 22 18:56
    kubukoz commented #345
  • Mar 22 18:53
    kubukoz synchronize #345
  • Mar 22 18:51
    kubukoz synchronize #345
  • Mar 22 18:14
    kubukoz synchronize #345
  • Mar 22 18:13
    kubukoz synchronize #345
  • Mar 22 18:04
    kubukoz commented #352
  • Mar 22 18:03
    kubukoz commented #352
  • Mar 22 18:00
    kubukoz synchronize #345
  • Mar 22 15:02
    cb372 commented #369
  • Mar 22 15:01
    cb372 review_requested #369
  • Mar 22 15:01
    cb372 opened #369
  • Mar 22 15:01

    cb372 on cb372

    Mergify: configuration update (compare)

  • Mar 22 15:01

    cb372 on cb372


  • Mar 20 11:26
    scala-steward opened #368
Bijan Chokoufe Nejad

Hey guys. Is there any release which uses cats-effects 1.0.0-RC or 1.0.0-RC2? I am getting errors like this

[error] java.lang.NoSuchMethodError: cats.effect.IO$.ioConcurrentEffect()Lcats/effect/ConcurrentEffect;
[error]         at scalacache.CatsEffect$modes$$anon$2.<init>(CatsEffect.scala:16)                                 
[error]         at scalacache.CatsEffect$modes$.<init>(CatsEffect.scala:15)                        
[error]         at scalacache.CatsEffect$modes$.<clinit>(CatsEffect.scala)

when trying to combine scalacache with http4s 0.19

Jules Ivanic
@bijancn no
We're waiting for the 1.0.0 release
Bijan Chokoufe Nejad
:disappointed: do you know the approximate timeline for that release?
Bijan Chokoufe Nejad
okay nvm. Nobody knows. Thanks for the info though
Jules Ivanic

do you know the approximate timeline for that release?


IMHO, not before september or october

@bijancn it should be easy to update the Cats version and publish your version ;)
Bijan Chokoufe Nejad
Do you think? I would expect some breaking changes?
Chetan Kumar
I am implementing a cache which is caching some api with some TTL.
I am not able to figure out how to do error handling, since cachingF will cache error also.
Wojtek Pituła
Hey! I have never used scalacache before, but now I'm in need of key-value store, most probably redis, and I'm considering using scalacache as an API. Do you think it's reasonable or should I just use some redis client? Side question: would I have access to some more advanced redis features if I need them or I can use only things that are covered by an API? I have not yet gone through docs, so if I will find all info there just tell me ;)
I'm mostly encouraged by being able to choose my effect type, if I remember correctly from scallar and this is indeed feature of scalacache.
Bijan Chokoufe Nejad
@Krever I can only say that the API for the inmemory cache is exactly what I would expect from a functional library :wink:
Mike Limansky

Hi! Could anybody help me with Id type? What is the proper way to get rid of it. I mean, I have a cache:

class Foo {
  import scalacache.modes.sync._

   private val cache = EhCache[String](.....)

   def doSomething(x: Int): String = {

This will not compile because result type must be String but caching returns [F[_]]F[String]. There is special "sync" version of memoize, but there no such functions for the Cacheclass itself. I've found that if i just create variable and return it it works fine, but for me it looks quite ugly.

I can change return type to Id[String], but I don't want to expose these details outside of class Foo.
Bijan Chokoufe Nejad
type Id[X] = X so I don't think this is the problem
Diego E. Alonso Blas

Good afternoon.
I have a question about the code of the CacheAlg file trait https://github.com/cb372/scalacache/blob/master/modules/core/shared/src/main/scala/scalacache/CacheAlg.scala
Usually, algebras with operations parametric on a parametric type F[_], like this one, declare that parameter on the top of the trait, i.e.

trait CacheAlg[V, F[_] ]

This way allows the implementations to bind the F[_] to a specific effect, such as F = doobie.ConnectionIO for a database. If the F[_] is declared on the methods, inheritors cannot spesialise the F[_].
Was there a specific reason, in this case, for taking this route F[_] on each abstract method?

Taylor Brown
@diesalbla I sort of asked that question back in june, in this chat
You can find Chris Birchall's response back then as well
Mohanraj Nagasamy

Hi Im using scalacache with Cats-Effects - How do I cache a method which returns EitherT[IO, Exception, Option[String]] not IO

Look at the find method - I want to cache the result of it and return the errors to caller if there is one

import cats.data.EitherT
import cats.effect.IO
import scalacache.redis.RedisCache
import scalacache.{Cache, CatsEffect, Mode, cachingF}
import scalacache.serialization.binary._

def find(key: Int, boolean: Boolean): EitherT[IO, Exception, Option[String]] = {
  val map = Map(1 -> "one", 2 -> "two")
  if (boolean) {
  } else {
    EitherT.leftT(new RuntimeException("validation failed"))

implicit val catsCache: Cache[Int] = RedisCache("localhost", 6379)
implicit val mode: Mode[IO] = CatsEffect.modes.io

//Doesn't compile
val result = cachingF("key1")(ttl = None) {
  find(1, true).value


result doesn't compile which expects implicts for the EitherT type.

Nafer Sanabria
Hi @cb372 ,
Do recent versions of scalacache support Guava LoadingCache ?
I spotted this issue cb372/scalacache#108
Currently, I'm using 0.21.0. Thanks in advance
Matthew de Detrich
Any idea when a new release will be made with cb372/scalacache#205 ?
i.e. an updated version of Circe
@mohanraj-nagasamy try to change your mode to scalacache.CatsEffect.modes.async and remove .value, also i see that you have a wrong cache type, it should be Cache[Option[String]]
Shawn Garner
I'm trying to write a spec and would like a cache for testing which is not the real redis one. Is there a memory/hashmap based one or something available?
Mohanraj Nagasamy
@gurinderu Thanks Nick! Any idea how do I avoid caching exceptions or exclude exceptions/validations from getting cached?
@mohanraj-nagasamy don't use exceptions dude) but if you can't you can wrap your code to Try and then transform this to OptionT or EitherT
Dominic Egger
Hey I am working on a very simple PR for easily wrapping caches in Resource[F[_], E] from cats
but I'm struggling with coming up with a clean solution for partial application of types to avoid having to specify the V parameter
does anyone have a good idea?
maybe it'd be better to pass F[Cache[V]] rather than thunk: => Cache[V]. Though ideally I'd like to enable the following syntax:
resourceCache[IO] {
    //cache init
Hi everyone! Is it possible to get total weight of objects in cache with Caffeine behind?
Hi All,
I'm trying to use a custom cacheConfig object (in order to control cache key creation). I've created an instance of it and have added it to my scope as an implicit value. So far I see that my custom implementation is not being taken into account (my breakpoint is being ignored). Can someone give me a concrete example of such a custom use? Thanks in advance.
Brian P. Holt
Is the scalacache-twitter-util module published anywhere? I don't see it in Maven Central
Paulo "JCranky" Siqueira
Hi. I just tried to update scalacache to 0.28.0 and noticed it is already depending on cats 2 milestones... is that on purpose?
Wojtek Pituła
@jcranky cant answer the question but why is that a problem? cats 2 should be bin-compat with cats 1
Paulo "JCranky" Siqueira
should, but why take the risk in a production system, while it is still a Milestone?
Arunav Sanyal
is there documentation on how to create a Caffeine scala cache. I am looking at this https://cb372.github.io/scalacache/docs/index.html and it only says "use caffeine if you want to use a high performance cache"
Arunav Sanyal
nvm, i figured it out : private val accountSPCache = CaffeineCache(Caffeine.newBuilder.build[String, Entry[List[String]]]). Can someone please add this (and every other version) into the documentation so that people do not have to go look at unit tests. Thanks
Arunav Sanyal
in the example | val result = caching("benjamin")(ttl = None) - what does ttl None mean? does it mean the ttl is now the same as the underlying cache init one OR does it imply that there is no ttl, this is meant to live till infinity
Sean Kwak

Hi :) I used scalacache version, 0.10.0 for scalacache-core & scala-caffeine. I upgraded to "0.28.0"

The following code stopped being compiled..

  implicit private val inMemoryCache: ScalaCache[InMemoryRepr] = ScalaCache(CaffeineCache())
  private val CacheTime = 10.seconds
  def myMethod: Future[Boolean] = memoizeSync(CacheTime) {.....}

Can I ask how I can migrate to 0.28.0?

I have changed the first line to

  implicit private val inMemoryCache: Cache[Future[Boolean]] = CaffeineCache[Future[Boolean]]

It compiles but I don't feel that it is the right approach..

Bijan Chokoufe Nejad
Hey @here . Is there a release planned with cats effect 2.0 ?
Matthew Tovbin
Howdy, folks! I just started using your library and it's absolutely amazing! Simple and clean API, easy integrations with Redis and others. Thank you!! ;))
Roberto Leibman
Hey... I'm having an issue... I'm trying to use memoizeF and for some reason it's not working the cache keeps on getting "missed" according to the logs. My code looks like this:
    private case object UserCache {

      import scalacache.ZioEffect.modes._

      private implicit val userCache: Cache[Option[User]] = CaffeineCache[Option[User]]

      private[LiveRecipeDAO] def get(userId: Int): Task[Option[User]] = memoizeF[Task, Option[User]](Option(1 hour)) {
        val zio: Task[Option[User]] = fromDBIO(for {
          userOpt <- UserQuery.filter(u => u.id === userId && !u.deleted).result.headOption
          accountOpt <- DBIO
                user =>
                  AccountQuery.filter(account => account.id === user.accountId).result.headOption
        } yield for {
          account <- accountOpt
          user    <- userOpt
        } yield user.toUser(account))

        val runtime = new DefaultRuntime {}
        for {
        _ <- console.putStrLn(s"Retrieving user ${userId}").provide(runtime.environment)
          zio <- zio.provide(self): Task[Option[User]]
        } yield zio
Roberto Leibman
The log does show that the value is inserted into the cache, but the cache consistently misses:
*** (s.caffeine.CaffeineCache) Cache miss for key dao.LiveRecipeDAO.$anon.UserCache.get(1)
*** (s.caffeine.CaffeineCache) Inserted value into cache with key dao.LiveRecipeDAO.$anon.UserCache.get(1) with TTL 3600000 ms
Roberto Leibman
... answering my own self...
Turns out that private inner objects are not "static" so each of my outer objects was getting it's own cache... I moved all the caches outside to a global Object and that worked!
Roberto Leibman
How do I remove from a cache? In the example above, I've tried removing by the user, and by the userId, but neither of those worked. Only removeAll worked

Hi, I'm evaluating ScalaCache usage, but I've got one problem. In order to avoid accidental flushing of a Redis prod database we have this configuration enabled (example aliases, ofc):


That means standard:


will not work, bc it uses hardcoded FLUSHDB command resulting in that exception:

redis.clients.jedis.exceptions.JedisDataException: ERR unknown command `FLUSHDB`, with args beginning with: 

Is there any workaround for that? I don't want to mix libraries and I would like to avoid low level calls, but I might accept it if inevitable.