Skip to main content

Sets API

Purely functional interface for the Sets API.

Sets are unordered collections of unique string elements.

Usage

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

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

Valkey[IO].utf8("valkey://localhost:6379").use { valkey =>
for
// SADD
added <- valkey.sadd("myset", "hello", "world", "foo")
_ <- IO.println(s"Added: ${added.toOption}") // Some(3)

// SMEMBERS
members <- valkey.smembers("myset")
_ <- IO.println(s"Members: ${members.toOption}")

// SISMEMBER
isMember <- valkey.sismember("myset", "hello")
_ <- IO.println(s"Is member: ${isMember.toOption}") // Some(true)

// Set operations: SUNION, SINTER, SDIFF
_ <- valkey.sadd("set1", "a", "b", "c")
_ <- valkey.sadd("set2", "b", "c", "d")

union <- valkey.sunion("set1", "set2")
_ <- IO.println(s"Union: ${union.toOption}") // {a, b, c, d}

inter <- valkey.sinter("set1", "set2")
_ <- IO.println(s"Intersection: ${inter.toOption}") // {b, c}

diff <- valkey.sdiff("set1", "set2")
_ <- IO.println(s"Difference: ${diff.toOption}") // {a}
yield ()
}

Available commands

CommandMethodReturn type
SADDsadd(key, members*)F[ValkeyResponse[Long]]
SREMsrem(key, members*)F[ValkeyResponse[Long]]
SMEMBERSsmembers(key)F[ValkeyResponse[Set[V]]]
SISMEMBERsismember(key, member)F[ValkeyResponse[Boolean]]
SMISMEMBERsmismember(key, members*)F[ValkeyResponse[List[Boolean]]]
SCARDscard(key)F[ValkeyResponse[Long]]
SUNIONsunion(keys*)F[ValkeyResponse[Set[V]]]
SUNIONSTOREsunionstore(dest, keys*)F[ValkeyResponse[Long]]
SINTERsinter(keys*)F[ValkeyResponse[Set[V]]]
SINTERSTOREsinterstore(dest, keys*)F[ValkeyResponse[Long]]
SINTERCARDsintercard(keys*)F[ValkeyResponse[Long]]
SDIFFsdiff(keys*)F[ValkeyResponse[Set[V]]]
SDIFFSTOREsdiffstore(dest, keys*)F[ValkeyResponse[Long]]
SPOPspop(key)F[ValkeyResponse[Option[V]]]
SPOP COUNTspopCount(key, count)F[ValkeyResponse[Set[V]]]
SRANDMEMBERsrandmember(key)F[ValkeyResponse[Option[V]]]
SMOVEsmove(src, dest, member)F[ValkeyResponse[Boolean]]
SSCANsscan(key, cursor)F[ValkeyResponse[ScanResult[Set[V]]]]