diff --git a/build.sbt b/build.sbt index 829758d7..15302884 100644 --- a/build.sbt +++ b/build.sbt @@ -67,7 +67,7 @@ lazy val memcached = createModule("memcached") lazy val redis = createModule("redis") .settings( libraryDependencies ++= Seq( - "redis.clients" % "jedis" % "2.10.2" + "redis.clients" % "jedis" % "3.7.0" ), coverageMinimum := 56, coverageFailOnMinimum := true diff --git a/modules/redis/src/main/scala/scalacache/redis/RedisCacheBase.scala b/modules/redis/src/main/scala/scalacache/redis/RedisCacheBase.scala index 9a724e6d..ec645edf 100644 --- a/modules/redis/src/main/scala/scalacache/redis/RedisCacheBase.scala +++ b/modules/redis/src/main/scala/scalacache/redis/RedisCacheBase.scala @@ -1,9 +1,10 @@ package scalacache.redis +import redis.clients.jedis.commands.BinaryJedisCommands +import redis.clients.jedis.util.Pool + import java.io.Closeable -import redis.clients.jedis._ -import redis.clients.util.Pool import scalacache.logging.Logger import scalacache.serialization.Codec import scalacache.{AbstractCache, CacheConfig} diff --git a/modules/redis/src/main/scala/scalacache/redis/RedisClusterCache.scala b/modules/redis/src/main/scala/scalacache/redis/RedisClusterCache.scala index ed7504a6..22b5c727 100644 --- a/modules/redis/src/main/scala/scalacache/redis/RedisClusterCache.scala +++ b/modules/redis/src/main/scala/scalacache/redis/RedisClusterCache.scala @@ -1,7 +1,5 @@ package scalacache.redis -import redis.clients.jedis.JedisCluster -import redis.clients.jedis.exceptions.JedisClusterException import scalacache.logging.Logger import scalacache.redis.StringEnrichment._ import scalacache.serialization.Codec @@ -10,6 +8,8 @@ import scalacache.{AbstractCache, CacheConfig} import scala.concurrent.duration.{Duration, _} import cats.implicits._ import cats.effect.Sync +import redis.clients.jedis.JedisCluster +import redis.clients.jedis.exceptions.JedisClusterException class RedisClusterCache[F[_]: Sync, V](val jedisCluster: JedisCluster)(implicit val config: CacheConfig, @@ -48,9 +48,9 @@ class RedisClusterCache[F[_]: Sync, V](val jedisCluster: JedisCluster)(implicit logger.warn( s"Because Redis (pre 2.6.12) does not support sub-second expiry, TTL of $d will be rounded up to 1 second" ) - } *> F.delay(jedisCluster.setex(keyBytes, 1, valueBytes)) + } *> F.delay(jedisCluster.setex(keyBytes, 1L, valueBytes)) case Some(d) => - F.delay(jedisCluster.setex(keyBytes, d.toSeconds.toInt, valueBytes)) + F.delay(jedisCluster.setex(keyBytes, d.toSeconds, valueBytes)) } } diff --git a/modules/redis/src/main/scala/scalacache/redis/SentinelRedisCache.scala b/modules/redis/src/main/scala/scalacache/redis/SentinelRedisCache.scala index a03a8487..b0225622 100644 --- a/modules/redis/src/main/scala/scalacache/redis/SentinelRedisCache.scala +++ b/modules/redis/src/main/scala/scalacache/redis/SentinelRedisCache.scala @@ -1,6 +1,5 @@ package scalacache.redis -import org.apache.commons.pool2.impl.GenericObjectPoolConfig import redis.clients.jedis._ import scala.collection.JavaConverters._ @@ -8,6 +7,7 @@ import scalacache.CacheConfig import scalacache.serialization.Codec import cats.implicits._ import cats.effect.{MonadCancel, Sync} +import org.apache.commons.pool2.impl.GenericObjectPoolConfig /** Thin wrapper around Jedis that works with Redis Sentinel. */ @@ -42,7 +42,7 @@ object SentinelRedisCache { config: CacheConfig, codec: Codec[V] ): SentinelRedisCache[F, V] = - apply(new JedisSentinelPool(clusterName, sentinels.asJava, new GenericObjectPoolConfig, password)) + apply(new JedisSentinelPool(clusterName, sentinels.asJava, new GenericObjectPoolConfig[Jedis], password)) /** Create a `SentinelRedisCache` that uses a `JedisSentinelPool` with a custom pool config. * @@ -58,7 +58,7 @@ object SentinelRedisCache { def apply[F[_]: Sync, V]( clusterName: String, sentinels: Set[String], - poolConfig: GenericObjectPoolConfig, + poolConfig: GenericObjectPoolConfig[Jedis], password: String )(implicit config: CacheConfig, diff --git a/modules/redis/src/main/scala/scalacache/redis/ShardedRedisCache.scala b/modules/redis/src/main/scala/scalacache/redis/ShardedRedisCache.scala index 3fc2ef84..2bdcf392 100644 --- a/modules/redis/src/main/scala/scalacache/redis/ShardedRedisCache.scala +++ b/modules/redis/src/main/scala/scalacache/redis/ShardedRedisCache.scala @@ -7,6 +7,7 @@ import scala.language.higherKinds import scalacache.CacheConfig import scalacache.serialization.Codec import cats.effect.{MonadCancel, Sync} +import org.apache.commons.pool2.impl.GenericObjectPoolConfig /** Thin wrapper around Jedis that works with sharded Redis. */ @@ -37,7 +38,7 @@ object ShardedRedisCache { val shards = hosts.map { case (host, port) => new JedisShardInfo(host, port) } - val pool = new ShardedJedisPool(new JedisPoolConfig(), shards.asJava) + val pool = new ShardedJedisPool(new GenericObjectPoolConfig[ShardedJedis], shards.asJava) apply(pool) } diff --git a/modules/redis/src/test/scala/scalacache/redis/SentinelRedisCacheSpec.scala b/modules/redis/src/test/scala/scalacache/redis/SentinelRedisCacheSpec.scala index 9dc31672..3ca99195 100644 --- a/modules/redis/src/test/scala/scalacache/redis/SentinelRedisCacheSpec.scala +++ b/modules/redis/src/test/scala/scalacache/redis/SentinelRedisCacheSpec.scala @@ -26,7 +26,7 @@ class SentinelRedisCacheSpec extends RedisCacheSpecBase { */ def assumingRedisSentinelIsRunning(f: (JedisSentinelPool, JedisClient) => Unit): Unit = { Try { - val jedisPool = new JedisSentinelPool("master", Set("127.0.0.1:26379").asJava, new GenericObjectPoolConfig) + val jedisPool = new JedisSentinelPool("master", Set("127.0.0.1:26379").asJava, new GenericObjectPoolConfig[Jedis]) val jedis = jedisPool.getResource() jedis.ping() (jedisPool, new JedisClient(jedis)) diff --git a/modules/redis/src/test/scala/scalacache/redis/ShardedRedisCacheSpec.scala b/modules/redis/src/test/scala/scalacache/redis/ShardedRedisCacheSpec.scala index a9bc2731..c86dabbb 100644 --- a/modules/redis/src/test/scala/scalacache/redis/ShardedRedisCacheSpec.scala +++ b/modules/redis/src/test/scala/scalacache/redis/ShardedRedisCacheSpec.scala @@ -1,12 +1,13 @@ package scalacache.redis -import redis.clients.jedis.{JedisPoolConfig, JedisShardInfo, ShardedJedisPool} +import redis.clients.jedis._ import scalacache._ import scalacache.serialization.Codec import scala.collection.JavaConverters._ import scala.util.{Failure, Success, Try} import cats.effect.IO +import org.apache.commons.pool2.impl.GenericObjectPoolConfig class ShardedRedisCacheSpec extends RedisCacheSpecBase { @@ -27,7 +28,7 @@ class ShardedRedisCacheSpec extends RedisCacheSpecBase { val shard2 = new JedisShardInfo("localhost", 6380) val jedisPool = - new ShardedJedisPool(new JedisPoolConfig(), java.util.Arrays.asList(shard1, shard2)) + new ShardedJedisPool(new GenericObjectPoolConfig[ShardedJedis], java.util.Arrays.asList(shard1, shard2)) val jedis = jedisPool.getResource jedis.getAllShards.asScala.foreach(_.ping())