Skip to main content

Keys API

Purely functional interface for the Keys API.

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
// DEL
_ <- valkey.set("mykey", "hello")
deleted <- valkey.del("mykey")
_ <- IO.println(s"Deleted: ${deleted.toOption}") // Some(1)

// EXISTS
exists <- valkey.exists("mykey")
_ <- IO.println(s"Exists: ${exists.toOption}") // Some(false)

// EXPIRE and TTL
_ <- valkey.set("ephemeral", "data")
_ <- valkey.expire("ephemeral", 60)
ttl <- valkey.ttl("ephemeral")
_ <- IO.println(s"TTL: ${ttl.toOption}") // Some(60)

// PERSIST (remove expiration)
_ <- valkey.persist("ephemeral")

// TYPE
_ <- valkey.set("str_key", "value")
keyType <- valkey.typeOf("str_key")
_ <- IO.println(s"Type: ${keyType.toOption}") // Some("string")

// RENAME
_ <- valkey.rename("str_key", "new_key")

// SCAN
scanResult <- valkey.scan("0", "new*", 100)
_ <- scanResult match
case Ok(result) => IO.println(s"Found: ${result.values}")
case Err(e) => IO.println(s"Error: ${e.message}")

// UNLINK (async DEL)
_ <- valkey.unlink("new_key", "ephemeral")
yield ()
}

Available commands

CommandMethodReturn type
DELdel(keys*)F[ValkeyResponse[Long]]
EXISTSexists(key)F[ValkeyResponse[Boolean]]
EXISTS (multi)existsMany(keys*)F[ValkeyResponse[Long]]
UNLINKunlink(keys*)F[ValkeyResponse[Long]]
EXPIREexpire(key, seconds)F[ValkeyResponse[Boolean]]
PEXPIREpexpire(key, millis)F[ValkeyResponse[Boolean]]
EXPIREATexpireAt(key, unixSeconds)F[ValkeyResponse[Boolean]]
PEXPIREATpexpireAt(key, unixMillis)F[ValkeyResponse[Boolean]]
TTLttl(key)F[ValkeyResponse[Long]]
PTTLpttl(key)F[ValkeyResponse[Long]]
PERSISTpersist(key)F[ValkeyResponse[Boolean]]
RENAMErename(key, newKey)F[ValkeyResponse[Unit]]
RENAMENXrenameNx(key, newKey)F[ValkeyResponse[Boolean]]
TYPEtypeOf(key)F[ValkeyResponse[String]]
TOUCHtouch(keys*)F[ValkeyResponse[Long]]
COPYcopy(source, dest)F[ValkeyResponse[Boolean]]
RANDOMKEYrandomKeyF[ValkeyResponse[Option[K]]]
SORTsort(key)F[ValkeyResponse[List[V]]]
DUMPdump(key)F[ValkeyResponse[Option[Array[Byte]]]]
RESTORErestore(key, ttl, bytes)F[ValkeyResponse[Unit]]
SCANscan(cursor)F[ValkeyResponse[ScanResult[List[K]]]]
SCAN (match)scan(cursor, pattern, count)F[ValkeyResponse[ScanResult[List[K]]]]