Skip to main content

Sorted Sets API

Purely functional interface for the Sorted Sets API.

Sorted sets are collections of unique string elements where each element has an associated score. Elements are ordered by score.

Usage

import cats.effect.*
import dev.profunktor.valkey4cats.Valkey
import dev.profunktor.valkey4cats.effect.Log
import dev.profunktor.valkey4cats.model.ValkeyResponse.{Ok, Err}
import dev.profunktor.valkey4cats.arguments.ScoreBoundary

given Log[IO] = Log.Stdout.instance[IO]

Valkey[IO].utf8("valkey://localhost:6379").use { valkey =>
for
// ZADD
added <- valkey.zadd("leaderboard", Map(
"alice" -> 100.0,
"bob" -> 85.0,
"carol" -> 92.0
))
_ <- IO.println(s"Added: ${added.toOption}") // Some(3)

// ZSCORE
score <- valkey.zscore("leaderboard", "alice")
_ <- IO.println(s"Alice's score: ${score.toOption}") // Some(Some(100.0))

// ZRANGE (by index)
top <- valkey.zrange("leaderboard", 0, -1)
_ <- IO.println(s"All (ascending): ${top.toOption}")

// ZINCRBY
newScore <- valkey.zincrby("leaderboard", 20.0, "bob")
_ <- IO.println(s"Bob's new score: ${newScore.toOption}") // Some(105.0)

// ZPOPMIN / ZPOPMAX
lowest <- valkey.zpopmin("leaderboard")
_ <- IO.println(s"Lowest: ${lowest.toOption}")

// Set operations
_ <- valkey.zadd("z1", Map("a" -> 1.0, "b" -> 2.0))
_ <- valkey.zadd("z2", Map("b" -> 3.0, "c" -> 4.0))
_ <- valkey.zunionstore("zunion_result", "z1", "z2")
yield ()
}

Available commands

CommandMethodReturn type
ZADDzadd(key, membersScores)F[ValkeyResponse[Long]]
ZREMzrem(key, members*)F[ValkeyResponse[Long]]
ZRANGEzrange(key, start, stop)F[ValkeyResponse[List[V]]]
ZRANGE WITHSCORESzrangeWithScores(key, start, stop)F[ValkeyResponse[List[(V, Double)]]]
ZSCOREzscore(key, member)F[ValkeyResponse[Option[Double]]]
ZMSCOREzmscore(key, members*)F[ValkeyResponse[List[Option[Double]]]]
ZCARDzcard(key)F[ValkeyResponse[Long]]
ZRANKzrank(key, member)F[ValkeyResponse[Option[Long]]]
ZREVRANKzrevrank(key, member)F[ValkeyResponse[Option[Long]]]
ZINCRBYzincrby(key, increment, member)F[ValkeyResponse[Double]]
ZCOUNTzcount(key, min, max)F[ValkeyResponse[Long]]
ZPOPMINzpopmin(key)F[ValkeyResponse[Option[(V, Double)]]]
ZPOPMAXzpopmax(key)F[ValkeyResponse[Option[(V, Double)]]]
ZRANDMEMBERzrandmember(key)F[ValkeyResponse[Option[V]]]
ZREMRANGEBYRANKzremrangebyrank(key, start, stop)F[ValkeyResponse[Long]]
ZREMRANGEBYSCOREzremrangebyscore(key, min, max)F[ValkeyResponse[Long]]
ZDIFFzdiff(keys*)F[ValkeyResponse[List[V]]]
ZUNIONzunion(keys*)F[ValkeyResponse[List[V]]]
ZUNIONSTOREzunionstore(dest, keys*)F[ValkeyResponse[Long]]
ZINTERzinter(keys*)F[ValkeyResponse[List[V]]]
ZINTERSTOREzinterstore(dest, keys*)F[ValkeyResponse[Long]]
ZINTERCARDzintercard(keys*)F[ValkeyResponse[Long]]
ZMPOPzmpop(keys, filter)F[ValkeyResponse[Option[(K, List[(V, Double)])]]]
BZPOPMINbzpopmin(keys, timeout)F[ValkeyResponse[Option[(K, V, Double)]]]
BZPOPMAXbzpopmax(keys, timeout)F[ValkeyResponse[Option[(K, V, Double)]]]
ZSCANzscan(key, cursor)F[ValkeyResponse[ScanResult[List[(V, Double)]]]]