intelephense

1.14.41.16.1
lib/stub/relay/Relay.php
lib/stub/relay/Relay.php
+873−337
Index: package/lib/stub/relay/Relay.php
===================================================================
--- package/lib/stub/relay/Relay.php
+++ package/lib/stub/relay/Relay.php
@@ -11,16 +11,16 @@
      * Relay's version.
      *
      * @var string
      */
-    public const VERSION = "0.7.0";
+    public const VERSION = "0.12.0";
 
     /**
      * Relay's version.
      *
      * @var string
      */
-    public const Version = "0.7.0";
+    public const Version = "0.12.0";
 
     /**
      * Integer representing no compression algorithm.
      *
@@ -108,9 +108,9 @@
      */
     public const MULTI = 0x01;
 
     /**
-     * Integer representing we're SUBSCRIBED.  Note that this constant can
+     * Integer representing we're SUBSCRIBED. Note that this constant can
      * only really be accessed when `true` is passed to `getMask()` telling
      * relay to return the complete bitmasked mode.
      *
      * @see Relay::getMode()
@@ -146,9 +146,9 @@
      */
     public const OPT_BACKOFF_ALGORITHM = 12;
 
     /**
-     * Toggle TCP_KEEPALIVE on a connection
+     * Toggle TCP_KEEPALIVE on a connection.
      *
      * @var int
      */
     public const OPT_TCP_KEEPALIVE = 6;
@@ -234,15 +234,44 @@
      */
     public const OPT_NULL_MULTIBULK_AS_NULL = 10;
 
     /**
+     * @var int
+     *
+     * When enabled, this option tells Relay to ignore purely numeric values
+     * when packing and unpacking data. This does not include numeric strings.
+     * If you want numeric strings to be ignored, typecast them to an int or float.
+     *
+     * The primary purpose of this option is to make it more ergonomic when
+     * setting keys that will later be incremented or decremented.
+     *
+     * Note: This option incurs a small performance penalty when reading data
+     * because we have to see if the data is a string representation of an int
+     * or float.
+     *
+     * @example
+     * <pre>
+     * <code>
+     * $redis->setOption(Relay::OPT_SERIALIZER, Relay::SERIALIZER_IGBINARY);
+     * $redis->setOption(Relay::OPT_PACK_IGNORE_NUMBERS, true);
+     *
+     * $redis->set('answer', 32);
+     *
+     * var_dump($redis->incrBy('answer', 10));  // int(42)
+     * var_dump($redis->get('answer'));         // int(42)
+     * </code>
+     * </pre>
+     */
+    public const OPT_PACK_IGNORE_NUMBERS = 15;
+
+    /**
      * Integer representing the throw-on-error option.
      *
      * Disabled by default. When enabled, Relay will throw exceptions when errors occur.
      *
      * @var int
      */
-    public const OPT_THROW_ON_ERROR = 105;
+    public const OPT_THROW_ON_ERROR = 106;
 
     /**
      * Integer representing Relay’s invalidation option.
      *
@@ -281,15 +310,43 @@
      */
     public const OPT_USE_CACHE = 104;
 
     /**
+     * Whether to enable client tracking for the connection.
+     *
+     * @var int
+     */
+    public const OPT_CLIENT_TRACKING = 105;
+
+    /**
      * Integer representing the scan option.
      *
      * @var int
      */
     public const OPT_SCAN = 4;
 
     /**
+     * Whether client capable of handling redirect messages.
+     *
+     * @var int
+     */
+    public const OPT_CAPA_REDIRECT = 107;
+
+    /**
+     * Should we restore subscriptions after reconnecting.
+     *
+     * @var int
+     */
+    public const OPT_RESTORE_PUBSUB = 108;
+
+    /**
+     * Adaptive caching configuration.
+     *
+     * @var int
+     */
+    public const OPT_ADAPTIVE_CACHE = 109;
+
+    /**
      * Issue one `SCAN` command at a time, sometimes returning an empty array of results.
      *
      * @var int
      */
@@ -404,17 +461,62 @@
      */
     public const REDIS_STREAM = 6;
 
     /**
-     * Establishes a new connection to Redis, or re-uses already opened connection.
+     * Integer representing Redis `vectorset` type.
      *
+     * @see Relay::type()
+     * @var int
+     */
+    public const REDIS_VECTORSET = 7;
+
+    /**
+     * The adaptive cache object.
+     *
+     * @readonly
+     * @var AdaptiveCache
+     */
+    public AdaptiveCache $adaptiveCache;
+
+    /**
+     * Establishes a new connection to Redis, or reuses already opened connection.
+     *
+     * @example $context array{
+     *   use-cache: bool,                       // Whether to use in-memory caching
+     *   adaptive-cache: array{
+     *     enabled: bool                        // Whether to disable adaptive caching
+     *     width: int                           // Number of horizontal cells in the adaptive cache (Supported values: 512 - (2^31)
+     *     depth: int                           // Number of vertical cells (Supported values: 1 - 8)
+     *     min_ratio: float                     // Minimum number of reads + writes before a key should be cached.
+     *     min_events: int                      // Minimum read-write ratio before a key is cached
+     *     formula: string                      // The formula used to calculate the read/write ratio for each key
+     *   },
+     *   client-tracking: bool,                 // Whether to disable Redis' client tracking (write to in-memory cache only)
+     *   client-invalidations: bool,            // Whether to invalidate cached keys without waiting for client tracking
+     *   throw-on-error: bool,                  // Whether to throw exceptions when read errors occur
+     *   phpredis-compatibility: bool,          // Whether to use PhpRedis compatibility mode (https://relay.so/docs/compatibility)
+     *   persistent: bool,                      // Whether to use a persistent connection
+     *   prefix: string,                        // Prefix used for all keys
+     *   database: int,                         // Database index to switch to
+     *   auth: string|array<string>,            // Password or ACL credentials
+     *   max-retries: int,                      // Number of reconnection attempts when a command or connection fails
+     *   serializer: int,                       // The serializer to use (see `OPT_SERIALIZER_*` constants)
+     *   compression: int,                      // The compression algorithm to use (see `OPT_COMPRESSION_*` constants)
+     *   compression-level: int                 // The compression level to use
+     *   stream: array,                         // TLS options (see https://www.php.net/manual/en/context.ssl.php)
+     *   reply-literal: bool,                   // Whether to return reply literals like `OK` instead of `true`
+     *   null-mbulk-as-null: bool,              // Whether to return multibulk as empty array or `null`
+     *   capa-redirect: bool,                   // Whether to use CAPA redirects (https://valkey.io/commands/client-capa/)
+     * } $context
+     *
      * @param  string|array|null  $host
      * @param  int  $port
      * @param  float  $connect_timeout
      * @param  float  $command_timeout
      * @param  array  $context
+     * @param  int  $database
      */
-    #[\Relay\Attributes\Server]
+    #[Attributes\Server]
     public function __construct(
         string|array|null $host = null,
         int $port = 6379,
         float $connect_timeout = 0.0,
@@ -423,11 +525,12 @@
         int $database = 0,
     ) {}
 
     /**
-     * Establishes a new connection to Redis.
-     * Will use `pconnect()` unless `relay.default_pconnect` is disabled.
+     * Establishes a new connection to Redis, or reuses already opened connection.
      *
+     * @see self::__construct() for context options.
+     *
      * @param  string  $host
      * @param  int  $port
      * @param  float  $timeout
      * @param  string|null  $persistent_id
@@ -436,9 +539,9 @@
      * @param  array  $context
      * @param  int  $database
      * @return bool
      */
-    #[\Relay\Attributes\Server]
+    #[Attributes\Server]
     public function connect(
         string $host,
         int $port = 6379,
         float $timeout = 0.0,
@@ -451,8 +554,10 @@
 
     /**
      * Establishes a persistent connection to Redis.
      *
+     * @see self::__construct() for context options.
+     *
      * @param  string  $host
      * @param  int  $port
      * @param  float  $timeout
      * @param  string|null  $persistent_id
@@ -461,9 +566,9 @@
      * @param  array  $context
      * @param  int  $database
      * @return bool
      */
-    #[\Relay\Attributes\Server]
+    #[Attributes\Server]
     public function pconnect(
         string $host,
         int $port = 6379,
         float $timeout = 0.0,
@@ -478,35 +583,35 @@
      * Closes the current connection, unless it's persistent.
      *
      * @return bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function close(): bool {}
 
     /**
      * Closes the current connection, if it's persistent.
      *
      * @return bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function pclose(): bool {}
 
     /**
      * Registers a new event listener.
      *
      * @param  callable  $callback
      * @return bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function listen(?callable $callback): bool {}
 
     /**
      * Registers a new `flushed` event listener.
      *
      * @param  callable  $callback
      * @return bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function onFlushed(?callable $callback): bool {}
 
     /**
      * Registers a new `invalidated` event listener.
@@ -514,26 +619,26 @@
      * @param  callable  $callback
      * @param  string|null  $pattern
      * @return bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function onInvalidated(?callable $callback, ?string $pattern = null): bool {}
 
     /**
      * Dispatches all pending events.
      *
      * @return int|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function dispatchEvents(): int|false {}
 
     /**
      * Returns a client option.
      *
      * @param  int  $option
      * @return mixed
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getOption(int $option): mixed {}
 
     /**
      * Returns or sets a client option.
@@ -541,9 +646,9 @@
      * @param  int  $option
      * @param  mixed  $value
      * @return mixed
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function option(int $option, mixed $value = null): mixed {}
 
     /**
      * Sets a client option.
@@ -573,204 +678,204 @@
      * @param  int  $option
      * @param  mixed  $value
      * @return bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function setOption(int $option, mixed $value): bool {}
 
     /**
      * Adds ignore pattern(s). Matching keys will not be cached in memory.
      *
      * @param  string  $pattern,...
      * @return int
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function addIgnorePatterns(string ...$pattern): int {}
 
     /**
      * Adds allow pattern(s). Only matching keys will be cached in memory.
      *
      * @param  string  $pattern,...
      * @return int
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function addAllowPatterns(string ...$pattern): int {}
 
     /**
      * Returns the connection timeout.
      *
      * @return float|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getTimeout(): float|false {}
 
     /**
      * @see Relay\Relay::getTimeout()
      *
      * @return float|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function timeout(): float|false {}
 
     /**
      * Returns the read timeout.
      *
      * @return float|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getReadTimeout(): float|false {}
 
     /**
      * @see Relay\Relay::getReadTimeout()
      *
      * @return float|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function readTimeout(): float|false {}
 
     /**
      * Returns the number of bytes sent and received over the network during the Relay object's
      * lifetime, or since the last time {@link Relay::clearBytes()} was called.
      *
      * @return array
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getBytes(): array {}
 
     /**
      * @see Relay\Relay::getBytes()
      *
      * @return array
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function bytes(): array {}
 
     /**
      * Returns the host or unix socket.
      *
      * @return string|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getHost(): string|false {}
 
     /**
      * Whether Relay is connected to Redis.
      *
      * @return bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function isConnected(): bool {}
 
     /**
      * Returns the port.
      *
      * @return int|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getPort(): int|false {}
 
     /**
      * Returns the authentication information.
      * In PhpRedis compatibility mode this method returns any configured password in plain-text.
      *
      * @return mixed
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getAuth(): mixed {}
 
     /**
-     * Returns the currently selected DB
+     * Returns the currently selected database.
      *
      * @return int|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getDbNum(): mixed {}
 
     /**
      * Returns the serialized value.
      *
      * @param  mixed  $value
      * @return mixed
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function _serialize(mixed $value): mixed {}
 
     /**
      * Returns the unserialized value.
      *
      * @param  mixed  $value
      * @return mixed
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function _unserialize(mixed $value): mixed {}
 
     /**
      * Compress data with Relay's currently configured compression algorithm.
      *
      * @param  string  $value
      * @return string
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function _compress(string $value): string {}
 
     /**
      * Uncompress data with Relay's currently configured compression algorithm.
      *
      * @param  string  $value
      * @return string
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function _uncompress(string $value): string {}
 
     /**
      * Returns the serialized and compressed value.
      *
      * @param  mixed  $value
      * @return string
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function _pack(mixed $value): string {}
 
     /**
      * Returns the unserialized and decompressed value.
      *
      * @param  mixed  $value
      * @return mixed
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function _unpack(mixed $value): mixed {}
 
     /**
      * Returns the value with the prefix.
      *
      * @param  mixed  $value
      * @return string
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function _prefix(mixed $value): string {}
 
     /**
      * Returns the last error message, if any.
      *
      * @return string|null
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getLastError(): string|null {}
 
     /**
      * Clears the last error that is set, if any.
      *
      * @return bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function clearLastError(): bool {}
 
     /**
      * Returns the connection's endpoint identifier.
      *
      * @return string|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function endpointId(): string|false {}
 
     /**
      * @see Relay\Relay::endpointId()
@@ -783,9 +888,9 @@
      * Returns a unique representation of the underlying socket connection identifier.
      *
      * @return string|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function socketId(): string|false {}
 
     /**
      * Returns statistics about Relay.
@@ -814,22 +919,23 @@
      * - `memory.limit`: The capped number of bytes Relay has available to use
      * - `memory.active`: The total amount of memory mapped into the allocator
      * - `memory.used`: The amount of memory pointing to live objects including metadata
      *
-     * - `endpoints.*.redis`: Information about the connected Redis server.
-     * - `endpoints.*.connections.*.keys`: The total number of cached keys for the connection.
+     * - `endpoints.*.redis`: Information about the connected Redis server of that endpoint
+     * - `endpoints.*.connections`: Information about the connection of each worker
+     * - `endpoints.*.adaptive_cache`: Information about the adaptive cache for each endpoint
      *
      * @return array
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public static function stats(): array {}
 
     /**
      * Returns the number of bytes allocated, or `0` in client-only mode.
      *
      * @return int
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public static function maxMemory(): int {}
 
     /**
      * Returns the number of bytes allocated, or `0` in client-only mode.
@@ -837,9 +943,9 @@
      * @deprecated 0.5.0 Use `Relay:maxMemory()`
      *
      * @return int
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public static function memory(): int {}
 
     /**
      * Execute any command against Redis, without applying
@@ -848,27 +954,27 @@
      * @param  string  $cmd
      * @param  mixed  $args,...
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function rawCommand(string $cmd, mixed ...$args): mixed {}
 
     /**
      * Select the Redis logical database having the specified zero-based numeric index.
      *
      * @param  int  $db
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function select(int $db): Relay|bool {}
 
     /**
      * Authenticate the connection using a password or an ACL username and password.
      *
      * @param  mixed  $auth
      * @return bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function auth(#[\SensitiveParameter] mixed $auth): bool {}
 
     /**
      * The INFO command returns information and statistics about Redis in a format
@@ -878,27 +984,27 @@
      *
      * @param  string  $sections,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function info(string ...$sections): Relay|array|false {}
 
     /**
      * Deletes all the keys of the currently selected database.
      *
      * @param  bool|null  $sync
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function flushdb(?bool $sync = null): Relay|bool {}
 
     /**
      * Deletes all the keys of all the existing databases, not just the currently selected one.
      *
      * @param  bool|null  $sync
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function flushall(?bool $sync = null): Relay|bool {}
 
     /**
      * Invokes a Redis function.
@@ -908,9 +1014,9 @@
      * @param  array  $argv
      * @param  callable|null  $handler
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function fcall(string $name, array $keys = [], array $argv = [], ?callable $handler = null): mixed {}
 
     /**
      * Invokes a read-only Redis function.
@@ -920,9 +1026,9 @@
      * @param  array  $argv
      * @param  callable|null  $handler
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function fcall_ro(string $name, array $keys = [], array $argv = [], callable $handler = null): mixed {}
 
     /**
      * Calls `FUNCTION` sub-command.
@@ -930,9 +1036,9 @@
      * @param  string  $op
      * @param  string  $args,...
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function function(string $op, string ...$args): mixed {}
 
     /**
      * Flushes Relay's in-memory cache of all databases.
@@ -943,21 +1049,36 @@
      * @param  string|null  $endpointId
      * @param  int|null  $db
      * @return bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public static function flushMemory(?string $endpointId = null, int $db = null): bool {}
 
     /**
+     * Retrieve the timestamp of the last *user initiated* flush of the in-memory cache.
+     * User initiated flushes can be done globally, specific to a single endpoint, or
+     * specific to a single endpoint and database.
+     *
+     * Since flushes at higher levels imply flushes at lower levels, Relay will return
+     * the highest level relevant flush given which level was requested.
+     *
+     * @param  string|null  $endpointId
+     * @param  int|null  $db
+     * @return float|false
+     */
+    #[Attributes\Local]
+    public static function lastMemoryFlush(?string $endpointId = null, int $db = null): float|false {}
+
+    /**
      * Run a search query on an index, and perform aggregate
      * transformations on the results, extracting statistics etc from them.
      *
      * @param  mixed  $index
      * @param  string  $query
      * @param  array|null  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftAggregate(mixed $index, string $query, ?array $options = null): Relay|array|false {}
 
     /**
      * Add an alias to an index.
@@ -965,18 +1086,18 @@
      * @param  mixed  $index
      * @param  string  $alias
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftAliasAdd(mixed $index, string $alias): Relay|bool {}
 
     /**
      * Remove an alias from an index.
      *
      * @param  string  $alias
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftAliasDel(string $alias): Relay|bool {}
 
     /**
      * Add an alias to an index.
@@ -986,9 +1107,9 @@
      * @param  mixed  $index
      * @param  string  $alias
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftAliasUpdate(mixed $index, string $alias): Relay|bool {}
 
     /**
      * Add a new attribute to the index.
@@ -999,9 +1120,9 @@
      * @param  array  $schema
      * @param  bool  $skipinitialscan
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftAlter(mixed $index, array $schema, bool $skipinitialscan = false): Relay|bool {}
 
     /**
      * Container command for get/set RediSearch configuration parameter.
@@ -1010,9 +1131,9 @@
      * @param  string  $option
      * @param  mixed  $value
      * @return Relay|array|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftConfig(string $operation, string $option, mixed $value = null): Relay|array|bool {}
 
     /**
      * Create an index with the given specification.
@@ -1021,9 +1142,9 @@
      * @param  array  $schema
      * @param  array|null  $options
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftCreate(mixed $index, array $schema, ?array $options = null): Relay|bool {}
 
     /**
      * Container command for del/read existing cursor.
@@ -1033,9 +1154,9 @@
      * @param  mixed  $cursor
      * @param  array|null  $options
      * @return Relay|array|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftCursor(string $operation, mixed $index, mixed $cursor, ?array $options = null): Relay|array|bool {}
 
     /**
      * Add terms to a dictionary.
@@ -1044,9 +1165,9 @@
      * @param  mixed  $term
      * @param  mixed  $other_terms,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftDictAdd(mixed $dict, mixed $term, mixed ...$other_terms): Relay|int|false {}
 
     /**
      * Delete terms from a dictionary.
@@ -1055,18 +1176,18 @@
      * @param  mixed  $term
      * @param  mixed  $other_terms,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftDictDel(mixed $dict, mixed $term, mixed ...$other_terms): Relay|int|false {}
 
     /**
      * Dump all terms in the given dictionary.
      *
      * @param  mixed  $dict
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftDictDump(mixed $dict): Relay|array|false {}
 
     /**
      * Delete an index.
@@ -1074,9 +1195,9 @@
      * @param  mixed  $index
      * @param  bool  $dd
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftDropIndex(mixed $index, bool $dd = false): Relay|bool {}
 
     /**
      * Return the execution plan for a complex query.
@@ -1085,9 +1206,9 @@
      * @param  string  $query
      * @param  int  $dialect
      * @return Relay|string|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftExplain(mixed $index, string $query, int $dialect = 0): Relay|string|false {}
 
     /**
      * Return the execution plan for a complex query but formatted for easier reading from CLI.
@@ -1096,18 +1217,18 @@
      * @param  string  $query
      * @param  int  $dialect
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftExplainCli(mixed $index, string $query, int $dialect = 0): Relay|array|false {}
 
     /**
      * Returns information and statistics about a given index.
      *
      * @param  mixed  $index
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftInfo(mixed $index): Relay|array|false {}
 
     /**
      * Apply FT.SEARCH or FT.AGGREGATE command to collect performance details.
@@ -1117,9 +1238,9 @@
      * @param  string  $query
      * @param  bool  $limited
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftProfile(mixed $index, string $command, string $query, bool $limited = false): Relay|array|false {}
 
     /**
      * Search the index with a textual query, returning either documents or just ids.
@@ -1128,9 +1249,9 @@
      * @param  string  $query
      * @param  array|null  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftSearch(mixed $index, string $query, ?array $options = null): Relay|array|false {}
 
     /**
      * Perform spelling correction on a query, returning suggestions for misspelled terms.
@@ -1139,18 +1260,18 @@
      * @param  string  $query
      * @param  array|null  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftSpellCheck(mixed $index, string $query, ?array $options = null): Relay|array|false {}
 
     /**
      * Dump the contents of a synonym group.
      *
      * @param  mixed  $index
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftSynDump(mixed $index): Relay|array|false {}
 
     /**
      * Update a synonym group.
@@ -1160,9 +1281,9 @@
      * @param  mixed  $term_or_terms
      * @param  bool  $skipinitialscan
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftSynUpdate(mixed $index, string $synonym, mixed $term_or_terms, bool $skipinitialscan = false): Relay|bool {}
 
     /**
      * Return a distinct set of values indexed in a Tag field.
@@ -1170,26 +1291,26 @@
      * @param  mixed  $index
      * @param  string  $tag
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ftTagVals(mixed $index, string $tag): Relay|array|false {}
 
     /**
      * Returns the number of keys in the currently-selected database.
      *
      * @return Relay|int
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function dbsize(): Relay|int|false {}
 
     /**
      * Serialize and return the value stored at key in a Redis-specific format.
      *
      * @param  mixed  $key
      * @return Relay|string|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function dump(mixed $key): Relay|string|null|false {}
 
     /**
      * Attach or detach the instance as a replica of another instance.
@@ -1197,9 +1318,9 @@
      * @param  string|null  $host
      * @param  int  $port
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function replicaof(?string $host = null, $port = 0): Relay|bool {}
 
     /**
      * Pause the client until sufficient local and/or remote AOF data has been flushed to disk.
@@ -1207,9 +1328,9 @@
      * @param  int  $numlocal
      * @param  int  $numremote
      * @return Relay|array
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function waitaof(int $numlocal, int $numremote, int $timeout): Relay|array|false {}
 
     /**
      * Create a key associated with a value that is obtained by deserializing the provided serialized value.
@@ -1219,9 +1340,9 @@
      * @param  string  $value
      * @param  array  $options
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function restore(mixed $key, int $ttl, string $value, ?array $options = null): Relay|bool {}
 
     /**
      * Atomically transfer a key from a Redis instance to another one.
@@ -1235,9 +1356,9 @@
      * @param  bool  $replace
      * @param  mixed  $credentials
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function migrate(
         string $host,
         int $port,
         string|array $key,
@@ -1255,67 +1376,67 @@
      * @param  mixed  $dst
      * @param  array  $options
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function copy(mixed $src, mixed $dst, ?array $options = null): Relay|bool {}
 
     /**
      * Asks Redis to echo back the provided string.
      *
      * @param  string  $arg
      * @return Relay|bool|string
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function echo(string $arg): Relay|bool|string {}
 
     /**
      * Returns PONG if no argument is provided, otherwise return a copy of the argument as a bulk.
      *
      * @param  string  $arg
      * @return Relay|bool|string
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ping(string $arg = null): Relay|bool|string {}
 
     /**
      * Returns the number of milliseoconds since Relay has seen activity from the server.
      *
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function idleTime(): Relay|int|false {}
 
     /**
      * Returns a random key from Redis.
      *
      * @return Relay|string|null|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function randomkey(): Relay|string|null|bool {}
 
     /**
      * Returns the current time from Redis.
      *
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function time(): Relay|array|false {}
 
     /**
      * Asynchronously rewrite the append-only file.
      *
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function bgrewriteaof(): Relay|bool {}
 
     /**
      * Returns the UNIX time stamp of the last successful save to disk.
      *
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function lastsave(): Relay|int|false {}
 
     /**
      * Get the longest common subsequence between two string keys.
@@ -1324,61 +1445,61 @@
      * @param  mixed  $key2
      * @param  array|null  $options
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function lcs(mixed $key1, mixed $key2, ?array $options = null): mixed {}
 
     /**
      * Asynchronously save the dataset to disk.
      *
-     * @param  bool  $schedule
+     * @param  null|string  $arg
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
-    public function bgsave(bool $schedule = false): Relay|bool {}
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
+    public function bgsave(null|string $arg = null): Relay|bool {}
 
     /**
      * Synchronously save the dataset to disk.
      *
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function save(): Relay|bool {}
 
     /**
      * Returns the role of the instance in the context of replication.
      *
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function role(): Relay|array|false {}
 
     /**
      * Returns the remaining time to live of a key that has a timeout in seconds.
      *
      * @param  mixed  $key
      * @return Relay|int
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ttl(mixed $key): Relay|int|false {}
 
     /**
      * Returns the remaining time to live of a key that has a timeout in milliseconds.
      *
      * @param  mixed  $key
      * @return Relay|int
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function pttl(mixed $key): Relay|int|false {}
 
     /**
      * Returns if key(s) exists.
      *
      * @param  mixed  $keys,...
      * @return Relay|bool|int
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function exists(mixed ...$keys): Relay|bool|int {}
 
     /**
      * Evaluate script using the Lua interpreter.
@@ -1389,13 +1510,13 @@
      * @param  array  $args
      * @param  int  $num_keys
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function eval(mixed $script, array $args = [], int $num_keys = 0): mixed {}
 
     /**
-     * Evaluate script using the Lua interpreter.  This is just the "read-only" variant of EVAL
+     * Evaluate script using the Lua interpreter. This is just the "read-only" variant of EVAL
      * meaning it can be run on read-only replicas.
      *
      * @see https://redis.io/commands/eval_ro
      *
@@ -1403,9 +1524,9 @@
      * @param  array  $args
      * @param  int  $num_keys
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function eval_ro(mixed $script, array $args = [], int $num_keys = 0): mixed {}
 
     /**
      * Evaluates a script cached on the server-side by its SHA1 digest.
@@ -1415,21 +1536,21 @@
      * @param  array  $args
      * @param  int  $num_keys
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function evalsha(string $sha, array $args = [], int $num_keys = 0): mixed {}
 
     /**
-     * Evaluates a script cached on the server-side by its SHA1 digest.  This is just the "read-only" variant
+     * Evaluates a script cached on the server-side by its SHA1 digest. This is just the "read-only" variant
      * of `EVALSHA` meaning it can be run on read-only replicas.
      *
      * @param  string  $sha
      * @param  array  $args
      * @param  int  $num_keys
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function evalsha_ro(string $sha, array $args = [], int $num_keys = 0): mixed {}
 
     /**
      * Executes `CLIENT` command operations.
@@ -1437,22 +1558,22 @@
      * @param  string  $operation
      * @param  mixed  $args,...
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function client(string $operation, mixed ...$args): mixed {}
 
     /**
-     * Add one or more members to a geospacial sorted set
+     * Add one or more members to a geospacial sorted set.
      *
      * @param  string  $key
      * @param  float  $lng
      * @param  float  $lat
      * @param  string  $member
      * @param  mixed  $other_triples_and_options,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function geoadd(
         string $key,
         float $lng,
         float $lat,
@@ -1468,9 +1589,9 @@
      * @param  string  $dst
      * @param  string|null  $unit
      * @return Relay|float|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function geodist(string $key, string $src, string $dst, ?string $unit = null): Relay|float|null|false {}
 
     /**
      * Retrieve one or more GeoHash encoded strings for members of the set.
@@ -1479,9 +1600,9 @@
      * @param  string  $member
      * @param  string  $other_members,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function geohash(string $key, string $member, string ...$other_members): Relay|array|false {}
 
     /**
      * Retrieve members of a geospacially sorted set that are within a certain radius of a location.
@@ -1493,9 +1614,9 @@
      * @param  string  $unit
      * @param  array  $options
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function georadius(string $key, float $lng, float $lat, float $radius, string $unit, array $options = []): mixed {}
 
     /**
      * Similar to `GEORADIUS` except it uses a member as the center of the query.
@@ -1506,9 +1627,9 @@
      * @param  string  $unit
      * @param  array  $options
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function georadiusbymember(string $key, string $member, float $radius, string $unit, array $options = []): mixed {}
 
     /**
      * Similar to `GEORADIUS` except it uses a member as the center of the query.
@@ -1519,9 +1640,9 @@
      * @param  string  $unit
      * @param  array  $options
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function georadiusbymember_ro(string $key, string $member, float $radius, string $unit, array $options = []): mixed {}
 
     /**
      * Retrieve members of a geospacially sorted set that are within a certain radius of a location.
@@ -1533,9 +1654,9 @@
      * @param  string  $unit
      * @param  array  $options
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function georadius_ro(string $key, float $lng, float $lat, float $radius, string $unit, array $options = []): mixed {}
 
     /**
      * Search a geospacial sorted set for members in various ways.
@@ -1546,9 +1667,9 @@
      * @param  string  $unit
      * @param  array  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function geosearch(
         string $key,
         array|string $position,
         array|int|float $shape,
@@ -1556,10 +1677,10 @@
         array $options = []
     ): Relay|array|false {}
 
     /**
-     * Search a geospacial sorted set for members within a given area or range, storing the results into
-     * a new set.
+     * Search a geospacial sorted set for members within a given area or range,
+     * storing the results into a new set.
      *
      * @param  string  $dst
      * @param  string  $src
      * @param  array|string  $position
@@ -1567,9 +1688,9 @@
      * @param  string  $unit
      * @param  array  $options
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function geosearchstore(
         string $dst,
         string $src,
         array|string $position,
@@ -1583,19 +1704,33 @@
      *
      * @param  mixed  $key
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function get(mixed $key): mixed {}
 
     /**
+     * Get the value and metadata of key.
+     *
+     * Result is an array with value and metadata or `false` in case of error.
+     * Currently metadata contains following elements:
+     *  - cached  whether value comes from in-memory cache or from server
+     *  - length  number of bytes used to store value
+     *
+     * @param  mixed  $key
+     * @return Relay|array{0: mixed, 1: array{cached: bool, length: int}}|false
+     */
+    #[Attributes\Server, Attributes\Cached]
+    public function getWithMeta(mixed $key): Relay|array|false {}
+
+    /**
      * Atomically sets key to value and returns the old value stored at key.
      *
      * @param  mixed  $key
      * @param  mixed  $value
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function getset(mixed $key, mixed $value): mixed {}
 
     /**
      * Returns the substring of the string value stored at key,
@@ -1605,9 +1740,9 @@
      * @param  int  $start
      * @param  int  $end
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function getrange(mixed $key, int $start, int $end): mixed {}
 
     /**
      * Overwrites part of the string stored at key, starting at
@@ -1617,9 +1752,9 @@
      * @param  int  $start
      * @param  mixed  $value
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function setrange(mixed $key, int $start, mixed $value): Relay|int|false {}
 
     /**
      * Returns the bit value at offset in the string value stored at key.
@@ -1627,9 +1762,9 @@
      * @param  mixed  $key
      * @param  int  $pos
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function getbit(mixed $key, int $pos): Relay|int|false {}
 
     /**
      * Count the number of set bits (population counting) in a string.
@@ -1639,20 +1774,20 @@
      * @param  int  $end
      * @param  bool  $by_bit
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function bitcount(mixed $key, int $start = 0, int $end = -1, bool $by_bit = false): Relay|int|false {}
 
     /**
-     * Perform various bitfield operations on a string key, such as getting/setting bit ranges,
-     * incrementing, etc.
+     * Perform various bitfield operations on a string key,
+     * such as getting/setting bit ranges, incrementing, etc.
      *
      * @param  mixed  $key
      * @param  mixed  $args,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function bitfield(mixed $key, mixed ...$args): Relay|array|false {}
 
     /**
      * This is a container command for runtime configuration commands.
@@ -1661,18 +1796,18 @@
      * @param  mixed  $key
      * @param  string|null  $value
      * @return Relay|array|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function config(string $operation, mixed $key = null, ?string $value = null): Relay|array|bool {}
 
     /**
      * Return an array with details about every Redis command.
      *
      * @param  array  $args,...
      * @return Relay|array|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function command(mixed ...$args): Relay|array|int|false {}
 
     /**
      * Perform a bitwise operation on one or more keys, storing the result in a new key.
@@ -1682,9 +1817,9 @@
      * @param  string  $srckey
      * @param  string  $other_keys,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function bitop(string $operation, string $dstkey, string $srckey, string ...$other_keys): Relay|int|false {}
 
     /**
      * Return the position of the first bit set to 1 or 0 in a string.
@@ -1695,9 +1830,9 @@
      * @param  int  $end
      * @param  bool  $bybit
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function bitpos(mixed $key, int $bit, int $start = null, int $end = null, bool $bybit = false): Relay|int|false {}
 
     /**
      * Sets or clears the bit at offset in the string value stored at key.
@@ -1706,19 +1841,19 @@
      * @param  int  $pos
      * @param  int  $val
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function setbit(mixed $key, int $pos, int $val): Relay|int|false {}
 
     /**
-     * Interact with Redis' ACLs
+     * Interact with ACLs.
      *
      * @param  string  $cmd
      * @param  string  $args,...
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function acl(string $cmd, string ...$args): mixed {}
 
     /**
      * If key already exists and is a string, this command appends
@@ -1729,9 +1864,9 @@
      * @param  mixed  $key
      * @param  mixed  $value
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function append(mixed $key, mixed $value): Relay|int|false {}
 
     /**
      * Set key to hold the string value. If key already holds
@@ -1741,9 +1876,9 @@
      * @param  mixed  $value
      * @param  mixed  $options
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function set(mixed $key, mixed $value, mixed $options = null): mixed {}
 
     /**
      * Get the value of key and optionally set its expiration.
@@ -1752,9 +1887,9 @@
      * @param  mixed  $key
      * @param  array  $options
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function getex(mixed $key, ?array $options = null): mixed {}
 
     /**
      * Get the value of key and delete the key. This command is similar to GET,
@@ -1763,9 +1898,9 @@
      *
      * @param  mixed  $key
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function getdel(mixed $key): mixed {}
 
     /**
      * Set key to hold the string value and set key to timeout after a given number of seconds.
@@ -1774,9 +1909,9 @@
      * @param  int  $seconds
      * @param  mixed  $value
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function setex(mixed $key, int $seconds, mixed $value): Relay|bool {}
 
     /**
      * Adds the specified elements to the specified HyperLogLog.
@@ -1784,18 +1919,18 @@
      * @param  string  $key
      * @param  array  $elements
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function pfadd(string $key, array $elements): Relay|int|false {}
 
     /**
      * Return the approximated cardinality of the set(s) observed by the HyperLogLog at key(s).
      *
      * @param  string|array  $key_or_keys
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function pfcount(string|array $key_or_keys): Relay|int|false {}
 
     /**
      * Merge given HyperLogLogs into a single one.
@@ -1814,9 +1949,9 @@
      * @param  int  $milliseconds
      * @param  mixed  $value
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function psetex(mixed $key, int $milliseconds, mixed $value): Relay|bool {}
 
     /**
      * Posts a message to the given channel.
@@ -1824,9 +1959,9 @@
      * @param  string  $channel
      * @param  string  $message
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function publish(string $channel, string $message): Relay|int|false {}
 
     /**
      * A container command for Pub/Sub introspection commands.
@@ -1834,9 +1969,9 @@
      * @param  string  $operation
      * @param  mixed  $args,...
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function pubsub(string $operation, mixed ...$args): mixed {}
 
     /**
      * Posts a message to the given shard channel.
@@ -1844,9 +1979,9 @@
      * @param  string  $channel
      * @param  string  $message
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function spublish(string $channel, string $message): Relay|int|false {}
 
     /**
      * Set key to hold string value if key does not exist. In that case, it is equal to SET.
@@ -1856,18 +1991,18 @@
      * @param  mixed  $key
      * @param  mixed  $value
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function setnx(mixed $key, mixed $value): Relay|bool {}
 
     /**
      * Returns the values of all specified keys.
      *
      * @param  array  $keys
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function mget(array $keys): Relay|array|false {}
 
     /**
      * Move key from the currently selected database to the specified destination database.
@@ -1875,9 +2010,9 @@
      * @param  mixed  $key
      * @param  int  $db
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function move(mixed $key, int $db): Relay|int|false {}
 
     /**
      * Sets the given keys to their respective values.
@@ -1885,9 +2020,9 @@
      *
      * @param  array  $kvals
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function mset(array $kvals): Relay|bool {}
 
     /**
      * Sets the given keys to their respective values.
@@ -1895,9 +2030,9 @@
      *
      * @param  array  $kvals
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function msetnx(array $kvals): Relay|bool {}
 
     /**
      * Renames key.
@@ -1905,9 +2040,9 @@
      * @param  mixed  $key
      * @param  mixed  $newkey
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function rename(mixed $key, mixed $newkey): Relay|bool {}
 
     /**
      * Renames key if the new key does not yet exist.
@@ -1915,27 +2050,37 @@
      * @param  mixed  $key
      * @param  mixed  $newkey
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function renamenx(mixed $key, mixed $newkey): Relay|bool {}
 
     /**
      * Removes the specified keys.
      *
      * @param  mixed  $keys,...
      * @return Relay|int|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function del(mixed ...$keys): Relay|int|bool {}
 
     /**
+     * Remove a key if it equals the provided value.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $value
+     * @return Relay|int|false
+     */
+    #[Attributes\ValkeyCommand]
+    public function delifeq(mixed $key, mixed $value): Relay|int|false {}
+
+    /**
      * Removes the specified keys without blocking Redis.
      *
      * @param  mixed  $keys,...
      * @return Relay|int
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function unlink(mixed ...$keys): Relay|int|false {}
 
     /**
      * Set a timeout on key.
@@ -1944,9 +2089,9 @@
      * @param  int  $seconds
      * @param  string|null  $mode
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function expire(mixed $key, int $seconds, ?string $mode = null): Relay|bool {}
 
     /**
      * Set a key's time to live in milliseconds.
@@ -1954,9 +2099,9 @@
      * @param  mixed  $key
      * @param  int  $milliseconds
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function pexpire(mixed $key, int $milliseconds): Relay|bool {}
 
     /**
      * Set a timeout on key using a unix timestamp.
@@ -1964,9 +2109,9 @@
      * @param  mixed  $key
      * @param  int  $timestamp
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function expireat(mixed $key, int $timestamp): Relay|bool {}
 
     /**
      * Returns the absolute Unix timestamp in seconds at which the given key will expire.
@@ -1974,10 +2119,10 @@
      * If the key does not exist -2.
      *
      * @param  mixed  $key
      * @return Relay|int|false
-     * */
-    #[\Relay\Attributes\RedisCommand]
+     */
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function expiretime(mixed $key): Relay|int|false {}
 
     /**
      * Set the expiration for a key as a UNIX timestamp specified in milliseconds.
@@ -1985,28 +2130,28 @@
      * @param  mixed  $key
      * @param  int  $timestamp_ms
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function pexpireat(mixed $key, int $timestamp_ms): Relay|bool {}
 
     /**
      * Semantic the same as EXPIRETIME, but returns the absolute Unix expiration
      * timestamp in milliseconds instead of seconds.
      *
      * @param  mixed  $key
      * @return Relay|int|false
-     * */
-    #[\Relay\Attributes\RedisCommand]
+     */
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function pexpiretime(mixed $key): Relay|int|false {}
 
     /**
      * Remove the existing timeout on key, turning the key from volatile to persistent.
      *
      * @param  mixed  $key
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function persist(mixed $key): Relay|bool {}
 
     /**
      * Returns the type of a given key.
@@ -2017,9 +2162,9 @@
      *
      * @param  mixed  $key
      * @return Relay|int|string|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function type(mixed $key): Relay|int|string|bool {}
 
     /**
      * Atomically returns and removes the first/last element of the list
@@ -2031,9 +2176,9 @@
      * @param  string  $srcpos
      * @param  string  $dstpos
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function lmove(mixed $srckey, mixed $dstkey, string $srcpos, string $dstpos): mixed {}
 
     /**
      * BLMOVE is the blocking variant of LMOVE. When source contains elements,
@@ -2046,9 +2191,9 @@
      * @param  string  $dstpos
      * @param  float  $timeout
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function blmove(mixed $srckey, mixed $dstkey, string $srcpos, string $dstpos, float $timeout): mixed {}
 
     /**
      * Returns the specified elements of the list stored at key.
@@ -2057,9 +2202,9 @@
      * @param  int  $start
      * @param  int  $stop
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function lrange(mixed $key, int $start, int $stop): Relay|array|false {}
 
     /**
      * Insert all the specified values at the head of the list stored at key.
@@ -2068,9 +2213,9 @@
      * @param  mixed  $mem
      * @param  mixed  $mems,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function lpush(mixed $key, mixed $mem, mixed ...$mems): Relay|int|false {}
 
     /**
      * Insert all the specified values at the tail of the list stored at key.
@@ -2079,9 +2224,9 @@
      * @param  mixed  $mem
      * @param  mixed  $mems,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function rpush(mixed $key, mixed $mem, mixed ...$mems): Relay|int|false {}
 
     /**
      * Inserts specified values at the head of the list stored at key,
@@ -2091,9 +2236,9 @@
      * @param  mixed  $mem
      * @param  mixed  $mems,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function lpushx(mixed $key, mixed $mem, mixed ...$mems): Relay|int|false {}
 
     /**
      * Inserts specified values at the tail of the list stored at key,
@@ -2103,9 +2248,9 @@
      * @param  mixed  $mem
      * @param  mixed  $mems,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function rpushx(mixed $key, mixed $mem, mixed ...$mems): Relay|int|false {}
 
     /**
      * Sets the list element at index to element.
@@ -2114,9 +2259,9 @@
      * @param  int  $index
      * @param  mixed  $mem
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function lset(mixed $key, int $index, mixed $mem): Relay|bool {}
 
     /**
      * Removes and returns the first elements of the list stored at key.
@@ -2124,9 +2269,9 @@
      * @param  mixed  $key
      * @param  int  $count
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function lpop(mixed $key, int $count = 1): mixed {}
 
     /**
      * The command returns the index of matching elements inside a Redis list.
@@ -2135,9 +2280,9 @@
      * @param  mixed  $value
      * @param  array  $options
      * @return Relay|int|array|false|null
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function lpos(mixed $key, mixed $value, ?array $options = null): Relay|int|array|false|null {}
 
     /**
      * Removes and returns the last elements of the list stored at key.
@@ -2145,9 +2290,9 @@
      * @param  mixed  $key
      * @param  int  $count
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function rpop(mixed $key, int $count = 1): mixed {}
 
     /**
      * Atomically returns and removes the last element (tail) of the list stored at source,
@@ -2156,9 +2301,9 @@
      * @param  mixed  $source
      * @param  mixed  $dest
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function rpoplpush(mixed $source, mixed $dest): mixed {}
 
     /**
      * Atomically returns and removes the last element (tail) of the list stored at source,
@@ -2169,9 +2314,9 @@
      * @param  mixed  $dest
      * @param  float  $timeout
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function brpoplpush(mixed $source, mixed $dest, float $timeout): mixed {}
 
     /**
      * BLPOP is a blocking list pop primitive. It is the blocking version of LPOP because
@@ -2181,33 +2326,33 @@
      * @param  string|float  $timeout_or_key
      * @param  array  $extra_args,...
      * @return Relay|array|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function blpop(string|array $key, string|float $timeout_or_key, mixed ...$extra_args): Relay|array|null|false {}
 
     /**
-     * Pop elements from a list, or block until one is available
+     * Pop elements from a list, or block until one is available.
      *
      * @param  float  $timeout
      * @param  array  $keys
      * @param  string  $from
      * @param  int  $count
      * @return Relay|array|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function blmpop(float $timeout, array $keys, string $from, int $count = 1): Relay|array|null|false {}
 
     /**
-     * Remove and return members with scores in a sorted set or block until one is available
+     * Remove and return members with scores in a sorted set or block until one is available.
      *
      * @param  float  $timeout
      * @param  array  $keys
      * @param  string  $from
      * @param  int  $count
      * @return Relay|array|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function bzmpop(float $timeout, array $keys, string $from, int $count = 1): Relay|array|null|false {}
 
     /**
      * Pops one or more elements from the first non-empty list key from the list of provided key names.
@@ -2216,9 +2361,9 @@
      * @param  string  $from
      * @param  int  $count
      * @return Relay|array|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function lmpop(array $keys, string $from, int $count = 1): Relay|array|null|false {}
 
     /**
      * Pops one or more elements, that are member-score pairs, from the
@@ -2228,9 +2373,9 @@
      * @param  string  $from
      * @param  int  $count
      * @return Relay|array|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zmpop(array $keys, string $from, int $count = 1): Relay|array|null|false {}
 
     /**
      * BRPOP is a blocking list pop primitive. It is the blocking version of RPOP because
@@ -2240,9 +2385,9 @@
      * @param  string|float  $timeout_or_key
      * @param  array  $extra_args,...
      * @return Relay|array|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function brpop(string|array $key, string|float $timeout_or_key, mixed ...$extra_args): Relay|array|null|false {}
 
     /**
      * BZPOPMAX is the blocking variant of the sorted set ZPOPMAX primitive.
@@ -2251,9 +2396,9 @@
      * @param  string|float  $timeout_or_key
      * @param  array  $extra_args,...
      * @return Relay|array|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function bzpopmax(string|array $key, string|float $timeout_or_key, mixed ...$extra_args): Relay|array|null|false {}
 
     /**
      * BZPOPMIN is the blocking variant of the sorted set ZPOPMIN primitive.
@@ -2262,9 +2407,9 @@
      * @param  string|float  $timeout_or_key
      * @param  array  $extra_args,...
      * @return Relay|array|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function bzpopmin(string|array $key, string|float $timeout_or_key, mixed ...$extra_args): Relay|array|null|false {}
 
     /**
      * This is a container command for object introspection commands.
@@ -2272,9 +2417,9 @@
      * @param  string  $op
      * @param  mixed  $key
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function object(string $op, mixed $key): mixed {}
 
     /**
      * Return the positions (longitude,latitude) of all the specified members
@@ -2283,9 +2428,9 @@
      * @param  mixed  $key
      * @param  mixed  $members,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function geopos(mixed $key, mixed ...$members): Relay|array|false {}
 
     /**
      * Removes the first count occurrences of elements equal to element from the list stored at key.
@@ -2294,9 +2439,9 @@
      * @param  mixed  $mem
      * @param  int  $count
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function lrem(mixed $key, mixed $mem, int $count = 0): Relay|int|false {}
 
     /**
      * Returns the element at index index in the list stored at key.
@@ -2304,9 +2449,9 @@
      * @param  mixed  $key
      * @param  int  $index
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function lindex(mixed $key, int $index): mixed {}
 
     /**
      * Inserts element in the list stored at key either before or after the reference value pivot.
@@ -2316,9 +2461,9 @@
      * @param  mixed  $pivot
      * @param  mixed  $element
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function linsert(mixed $key, string $op, mixed $pivot, mixed $element): Relay|int|false {}
 
     /**
      * Trim an existing list so that it will contain only the specified range of elements specified.
@@ -2327,9 +2472,9 @@
      * @param  int  $start
      * @param  int  $end
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ltrim(mixed $key, int $start, int $end): Relay|bool {}
 
     /**
      * Returns the value associated with field in the hash stored at key.
@@ -2337,46 +2482,56 @@
      * @param  mixed  $hash
      * @param  mixed  $member
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function hget(mixed $hash, mixed $member): mixed {}
 
     /**
+     * Returns one or more fields while also setting an expiration on them.
+     *
+     * @param  mixed  $hash
+     * @param  array  $fields
+     * @param  mixed  $expiry = null
+     * @return Relay|array|false
+     */
+    public function hgetex(mixed $hash, array $fields, mixed $expiry = null): Relay|array|false {}
+
+    /**
      * Returns the string length of the value associated with field in the hash stored at key.
      *
      * @param  mixed  $hash
      * @param  mixed  $member
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function hstrlen(mixed $hash, mixed $member): Relay|int|false {}
 
     /**
      * Returns all fields and values of the hash stored at key.
      *
      * @param  mixed  $hash
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function hgetall(mixed $hash): Relay|array|false {}
 
     /**
      * Returns all field names in the hash stored at key.
      *
      * @param  mixed  $hash
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function hkeys(mixed $hash): Relay|array|false {}
 
     /**
      * Returns all values in the hash stored at key.
      *
      * @param  mixed  $hash
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function hvals(mixed $hash): Relay|array|false {}
 
     /**
      * Returns the values associated with the specified fields in the hash stored at key.
@@ -2384,19 +2539,29 @@
      * @param  mixed  $hash
      * @param  array  $members
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function hmget(mixed $hash, array $members): Relay|array|false {}
 
     /**
+     * Gets and deletes one or more hash fields.
+     *
+     * @param  mixed  $key
+     * @param  array  $fields
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function hgetdel(mixed $key, array $fields): Relay|array|false {}
+
+    /**
      * When called with just the key argument, return a random field from the hash value stored at key.
      *
      * @param  mixed  $hash
      * @param  array  $options
      * @return Relay|array|string|null|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function hrandfield(mixed $hash, ?array $options = null): Relay|array|string|null|false {}
 
     /**
      * Sets the specified fields to their respective values in the hash stored at key.
@@ -2404,9 +2569,9 @@
      * @param  mixed  $hash
      * @param  array  $members
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function hmset(mixed $hash, array $members): Relay|bool {}
 
     /**
      * Returns if field is an existing field in the hash stored at key.
@@ -2414,20 +2579,118 @@
      * @param  mixed  $hash
      * @param  mixed  $member
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function hexists(mixed $hash, mixed $member): Relay|bool {}
 
     /**
+     * Se an expiration for one or more hash fields.
+     *
+     * @param  mixed  $hash
+     * @param  int  $ttl
+     * @param  array  $fields
+     * @param  string  $mode
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function hexpire(mixed $hash, int $ttl, array $fields, ?string $mode = null): Relay|array|false {}
+
+    /**
+     * Set a millisecond resolution expiry on one or more hash fields.
+     *
+     * @param  mixed  $hash
+     * @param  int  $ttl
+     * @param  array  $fields
+     * @param  string  $mode
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function hpexpire(mixed $hash, int $ttl, array $fields, ?string $mode = null): Relay|array|false {}
+
+    /**
+     * Set a unix timestamp expiration for one or more hash fields.
+     *
+     * @param  mixed  $hash
+     * @param  int  $ttl
+     * @param  array  $fields
+     * @param  string  $mode
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function hexpireat(mixed $hash, int $ttl, array $fields, ?string $mode = null): Relay|array|false {}
+
+    /**
+     * Set a millisecond resolution unix timestamp expiration for one or more hash fields.
+     *
+     * @param  mixed  $hash
+     * @param  int  $ttl
+     * @param  array  $fields
+     * @param  string  $mode
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function hpexpireat(mixed $hash, int $ttl, array $fields, ?string $mode = null): Relay|array|false {}
+
+    /**
+     * Get the expire time in seconds for one or more hash fields.
+     *
+     * @param  mixed  $hash
+     * @param  array  $fields
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function httl(mixed $hash, array $fields): Relay|array|false {}
+
+    /**
+     * Get the expire time in milliseconds for one or more hash fields.
+     *
+     * @param  mixed  $hash
+     * @param  array  $fields
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function hpttl(mixed $hash, array $fields): Relay|array|false {}
+
+    /**
+     * Get the unix timestamp expiration time for one or more hash fields.
+     *
+     * @param  mixed  $hash
+     * @param  array  $fields
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function hexpiretime(mixed $hash, array $fields): Relay|array|false {}
+
+    /**
+     * Get the millisecond precision unix timestamp
+     * expiration time for one or more hash fields.
+     *
+     * @param  mixed  $hash
+     * @param  array  $fields
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function hpexpiretime(mixed $hash, array $fields): Relay|array|false {}
+
+    /**
+     * Persist one or more hash fields.
+     *
+     * @param  mixed  $hash
+     * @param  array  $fields
+     * @return Relay|array|false
+     */
+    public function hpersist(mixed $hash, array $fields): Relay|array|false {}
+
+    /**
      * Sets field in the hash stored at key to value, only if field does not yet exist.
      *
      * @param  mixed  $hash
      * @param  mixed  $member
      * @param  mixed  $value
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function hsetnx(mixed $hash, mixed $member, mixed $value): Relay|bool {}
 
     /**
      * Sets field in the hash stored at key to value.
@@ -2435,20 +2698,31 @@
      * @param  mixed  $key
      * @param  mixed  $keys_and_vals...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function hset(mixed $key, mixed ...$keys_and_vals): Relay|int|false {}
 
     /**
+     * Set one or more hash fields and values with expiration options.
+     *
+     * @param  mixed  $key
+     * @param  array  $fields
+     * @param  null|int|float|array  $expiry = null
+     * @return Relay|int|false
+     */
+    #[Attributes\RedisCommand]
+    public function hsetex(mixed $key, array $fields, null|int|float|array $expiry = null): Relay|int|false {}
+
+    /**
      * Removes the specified fields from the hash stored at key.
      *
      * @param  mixed  $key
      * @param  mixed  $mem
      * @param  string  $mems,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function hdel(mixed $key, mixed $mem, string ...$mems): Relay|int|false {}
 
     /**
      * Increments the number stored at field in the hash stored at key by increment.
@@ -2457,9 +2731,9 @@
      * @param  mixed  $mem
      * @param  int  $value
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function hincrby(mixed $key, mixed $mem, int $value): Relay|int|false {}
 
     /**
      * Increment the specified field of a hash stored at key, and representing
@@ -2469,9 +2743,9 @@
      * @param  mixed  $mem
      * @param  float  $value
      * @return Relay|float|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function hincrbyfloat(mixed $key, mixed $mem, float $value): Relay|float|bool {}
 
     /**
      * Increments the number stored at key by one.
@@ -2479,9 +2753,9 @@
      * @param  mixed  $key
      * @param  int  $by
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function incr(mixed $key, int $by = 1): Relay|int|false {}
 
     /**
      * Decrements the number stored at key by one.
@@ -2489,9 +2763,9 @@
      * @param  mixed  $key
      * @param  int  $by
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function decr(mixed $key, int $by = 1): Relay|int|false {}
 
     /**
      * Increments the number stored at key by increment.
@@ -2499,9 +2773,9 @@
      * @param  mixed  $key
      * @param  int  $value
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function incrby(mixed $key, int $value): Relay|int|false {}
 
     /**
      * Decrements the number stored at key by decrement.
@@ -2509,9 +2783,9 @@
      * @param  mixed  $key
      * @param  int  $value
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function decrby(mixed $key, int $value): Relay|int|false {}
 
     /**
      * Increment the string representing a floating point number stored at key by the specified increment.
@@ -2519,9 +2793,9 @@
      * @param  mixed  $key
      * @param  float  $value
      * @return Relay|float|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function incrbyfloat(mixed $key, float $value): Relay|float|false {}
 
     /**
      * Append the json values into the array at path after the last element in it.
@@ -2529,9 +2803,9 @@
      * @param  mixed  $key
      * @param  mixed  $value_or_array
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonArrAppend(mixed $key, mixed $value_or_array, ?string $path = null): Relay|array|false {}
 
     /**
      * Search for the first occurrence of a JSON value in an array.
@@ -2542,9 +2816,9 @@
      * @param  int|null  $start
      * @param  int|null  $stop
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonArrIndex(mixed $key, string $path, mixed $value, ?int $start = 0, ?int $stop = -1): Relay|array|false {}
 
     /**
      * Insert the json values into the array at path before the index (shifts to the right).
@@ -2555,9 +2829,9 @@
      * @param  mixed  $value
      * @param  mixed  $other_values,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonArrInsert(mixed $key, string $path, int $index, mixed $value, mixed ...$other_values): Relay|array|false {}
 
     /**
      * Report the length of the JSON array at path in key.
@@ -2565,9 +2839,9 @@
      * @param  mixed  $key
      * @param  string|null  $path
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonArrLen(mixed $key, ?string $path = null): Relay|array|false {}
 
     /**
      * Remove and return an element from the index in the array.
@@ -2576,9 +2850,9 @@
      * @param  string|null  $path
      * @param  int  $index
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonArrPop(mixed $key, ?string $path = null, int $index = -1): Relay|array|false {}
 
     /**
      * Trim an array so that it contains only the specified inclusive range of elements.
@@ -2588,9 +2862,9 @@
      * @param  int  $start
      * @param  int  $stop
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonArrTrim(mixed $key, string $path, int $start, int $stop): Relay|array|false {}
 
     /**
      * Clear container values (arrays/objects) and set numeric values to 0.
@@ -2598,9 +2872,9 @@
      * @param  mixed  $key
      * @param  string|null  $path
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonClear(mixed $key, ?string $path = null): Relay|int|false {}
 
     /**
      * Container command for JSON debugging related tasks.
@@ -2609,9 +2883,9 @@
      * @param  mixed  $key
      * @param  string|null  $path
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonDebug(string $command, mixed $key, ?string $path = null): Relay|int|false {}
 
     /**
      * Delete a value.
@@ -2619,15 +2893,15 @@
      * @param  mixed  $key
      * @param  string|null  $path
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonDel(mixed $key, ?string $path = null): Relay|int|false {}
 
     /**
      * @see Relay::jsonDel
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonForget(mixed $key, ?string $path = null): Relay|int|false {}
 
     /**
      * Return the value at path in JSON serialized form.
@@ -2636,9 +2910,9 @@
      * @param  array  $options
      * @param  string  $paths,...
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonGet(mixed $key, array $options = [], string ...$paths): mixed {}
 
     /**
      * Merge a given JSON value into matching paths. Consequently, JSON values
@@ -2648,9 +2922,9 @@
      * @param  string  $path
      * @param  mixed  $value
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonMerge(mixed $key, string $path, mixed $value): Relay|bool {}
 
     /**
      * Return the values at path from multiple key arguments.
@@ -2658,9 +2932,9 @@
      * @param  mixed  $key_or_array
      * @param  string  $path
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonMget(mixed $key_or_array, string $path): Relay|array|false {}
 
     /**
      * Set or update one or more JSON values according to the specified key-path-value triplets.
@@ -2670,9 +2944,9 @@
      * @param  mixed  $value
      * @param  mixed  $other_triples
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonMset(mixed $key, string $path, mixed $value, mixed ...$other_triples): Relay|bool {}
 
     /**
      * Increment the number value stored at path by number.
@@ -2681,9 +2955,9 @@
      * @param  string  $path
      * @param  int  $value
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonNumIncrBy(mixed $key, string $path, int $value): Relay|array|false {}
 
     /**
      * Multiply the number value stored at path by number.
@@ -2692,9 +2966,9 @@
      * @param  string  $path
      * @param  int  $value
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonNumMultBy(mixed $key, string $path, int $value): Relay|array|false {}
 
     /**
      * Return the keys in the object that's referenced by path.
@@ -2702,9 +2976,9 @@
      * @param  mixed  $key
      * @param  string|null  $path
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonObjKeys(mixed $key, ?string $path = null): Relay|array|false {}
 
     /**
      * Report the number of keys in the JSON object at path in key.
@@ -2712,9 +2986,9 @@
      * @param  mixed  $key
      * @param  string|null  $path
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonObjLen(mixed $key, ?string $path = null): Relay|array|false {}
 
     /**
      * Return the JSON in key in RESP specification form.
@@ -2722,9 +2996,9 @@
      * @param  mixed  $key
      * @param  string|null  $path
      * @return Relay|array|string|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonResp(mixed $key, ?string $path = null): Relay|array|string|int|false {}
 
     /**
      * Set the JSON value at path in key.
@@ -2734,9 +3008,9 @@
      * @param  mixed  $value
      * @param  string|null  $condition
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonSet(mixed $key, string $path, mixed $value, ?string $condition = null): Relay|bool {}
 
     /**
      * Append the json-string values to the string at path.
@@ -2745,9 +3019,9 @@
      * @param  mixed  $value
      * @param  string|null  $path
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonStrAppend(mixed $key, mixed $value, ?string $path = null): Relay|array|false {}
 
     /**
      * Report the length of the JSON String at path in key.
@@ -2755,9 +3029,9 @@
      * @param  mixed  $key
      * @param  string|null  $path
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonStrLen(mixed $key, ?string $path = null): Relay|array|false {}
 
     /**
      * Toggle a Boolean value stored at path.
@@ -2765,9 +3039,9 @@
      * @param  mixed  $key
      * @param  string  $path
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonToggle(mixed $key, string $path): Relay|array|false {}
 
     /**
      * Report the type of JSON value at path.
@@ -2775,9 +3049,9 @@
      * @param  mixed  $key
      * @param  string|null  $path
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function jsonType(mixed $key, ?string $path = null): Relay|array|false {}
 
     /**
      * Returns the members of the set resulting from the difference
@@ -2786,9 +3060,9 @@
      * @param  mixed  $key
      * @param  mixed  $other_keys,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function sdiff(mixed $key, mixed ...$other_keys): Relay|array|false {}
 
     /**
      * This command is equal to SDIFF, but instead of returning the resulting set,
@@ -2797,9 +3071,9 @@
      * @param  mixed  $key
      * @param  mixed  $other_keys,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function sdiffstore(mixed $key, mixed ...$other_keys): Relay|int|false {}
 
     /**
      * Returns the members of the set resulting from the intersection of all the given sets.
@@ -2807,9 +3081,9 @@
      * @param  mixed  $key
      * @param  mixed  $other_keys,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function sinter(mixed $key, mixed ...$other_keys): Relay|array|false {}
 
     /**
      * Intersect multiple sets and return the cardinality of the result.
@@ -2817,9 +3091,9 @@
      * @param  array  $keys
      * @param  int  $limit
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function sintercard(array $keys, int $limit = -1): Relay|int|false {}
 
     /**
      * This command is equal to SINTER, but instead of returning the resulting set,
@@ -2828,9 +3102,9 @@
      * @param  mixed  $key
      * @param  mixed  $other_keys,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function sinterstore(mixed $key, mixed ...$other_keys): Relay|int|false {}
 
     /**
      * Returns the members of the set resulting from the union of all the given sets.
@@ -2838,9 +3112,9 @@
      * @param  mixed  $key
      * @param  mixed  $other_keys,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function sunion(mixed $key, mixed ...$other_keys): Relay|array|false {}
 
     /**
      * This command is equal to SUNION, but instead of returning the resulting set,
@@ -2849,9 +3123,9 @@
      * @param  mixed  $key
      * @param  mixed  $other_keys,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function sunionstore(mixed $key, mixed ...$other_keys): Relay|int|false {}
 
     /**
      * Subscribes to the specified channels.
@@ -2859,18 +3133,18 @@
      * @param  array  $channels
      * @param  callable  $callback
      * @return bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function subscribe(array $channels, callable $callback): bool {}
 
     /**
      * Unsubscribes from the given channels, or from all of them if none is given.
      *
      * @param  array  $channels
      * @return bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function unsubscribe(array $channels = []): bool {}
 
     /**
      * Subscribes to the given patterns.
@@ -2878,18 +3152,18 @@
      * @param  array  $patterns
      * @param  callable  $callback
      * @return bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function psubscribe(array $patterns, callable $callback): bool {}
 
     /**
      * Unsubscribes from the given patterns, or from all of them if none is given.
      *
      * @param  array  $patterns
      * @return bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function punsubscribe(array $patterns = []): bool {}
 
     /**
      * Subscribes to the specified shard channels.
@@ -2897,18 +3171,18 @@
      * @param  array  $channels
      * @param  callable  $callback
      * @return bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function ssubscribe(array $channels, callable $callback): bool {}
 
     /**
      * Unsubscribes from the given shard channels, or from all of them if none is given.
      *
      * @param  array  $channels
      * @return bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function sunsubscribe(array $channels = []): bool {}
 
     /**
      * Alters the last access time of a key(s).
@@ -2916,17 +3190,17 @@
      * @param  array|string  $key_or_array
      * @param  mixed  $more_keys,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function touch(array|string $key_or_array, mixed ...$more_keys): Relay|int|false {}
 
     /**
      * A pipeline block is simply transmitted faster to the server (like `MULTI`), but without any guarantee of atomicity.
      *
      * @return Relay|bool
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function pipeline(): Relay|bool {}
 
     /**
      * Marks the start of a transaction block. Subsequent commands will be queued for atomic execution using EXEC.
@@ -2935,17 +3209,17 @@
      *
      * @param  int  $mode
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function multi(int $mode = 0): Relay|bool {}
 
     /**
      * Executes all previously queued commands in a transaction and restores the connection state to normal.
      *
      * @return Relay|array|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function exec(): Relay|array|bool {}
 
     /**
      * Wait for the synchronous replication of all the write
@@ -2954,9 +3228,9 @@
      * @param  int  $replicas
      * @param  int  $timeout
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function wait(int $replicas, $timeout): Relay|int|false {}
 
     /**
      * Marks the given keys to be watched for conditional execution of a transaction.
@@ -2964,121 +3238,151 @@
      * @param  mixed  $key
      * @param  mixed  $other_keys,...
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function watch(mixed $key, mixed ...$other_keys): Relay|bool {}
 
     /**
      * Flushes all the previously watched keys for a transaction.
      * If you call EXEC or DISCARD, there's no need to manually call UNWATCH.
      *
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function unwatch(): Relay|bool {}
 
     /**
      * Flushes all previously queued commands in a transaction and restores the connection state to normal.
      * If WATCH was used, DISCARD unwatches all keys watched by the connection.
      *
      * @return bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function discard(): bool {}
 
     /**
+     * Get the server name as reported by the `HELLO` response.
+     *
+     * @return string|false
+     */
+    #[Attributes\Local]
+    public function serverName(): string|false {}
+
+    /**
+     * Get the server version as reported by the `HELLO` response.
+     *
+     * @return string|false
+     */
+    #[Attributes\Local]
+    public function serverVersion(): string|false {}
+
+    /**
      * Get the mode Relay is currently in.
      * `Relay::ATOMIC`, `Relay::PIPELINE` or `Relay::MULTI`.
      *
      * @param  bool  $masked
      * @return int
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function getMode(bool $masked = false): int {}
 
     /**
      * Clear the accumulated sent and received bytes.
      *
      * @return void
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function clearBytes(): void {}
 
     /**
      * Scan the keyspace for matching keys.
      *
-     * @param  mixed  $iterator
+     * @param  mixed  &$iterator
+     * @param-out  mixed  $iterator
      * @param  mixed  $match
      * @param  int  $count
      * @param  string|null  $type
      * @return array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function scan(mixed &$iterator, mixed $match = null, int $count = 0, ?string $type = null): array|false {}
 
     /**
      * Iterates fields of Hash types and their associated values.
      *
      * @param  mixed  $key
-     * @param  mixed  $iterator
+     * @param  mixed  &$iterator
+     * @param-out mixed $iterator
      * @param  mixed  $match
      * @param  int  $count
      * @return array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function hscan(mixed $key, mixed &$iterator, mixed $match = null, int $count = 0): array|false {}
 
     /**
      * Iterates elements of Sets types.
      *
      * @param  mixed  $key
-     * @param  mixed  $iterator
+     * @param  mixed  &$iterator
+     * @param-out mixed $iterator
      * @param  mixed  $match
      * @param  int  $count
      * @return array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function sscan(mixed $key, mixed &$iterator, mixed $match = null, int $count = 0): array|false {}
 
     /**
      * Iterates elements of Sorted Set types and their associated scores.
      *
      * @param  mixed  $key
-     * @param  mixed  $iterator
+     * @param  mixed  &$iterator
+     * @param-out mixed $iterator
      * @param  mixed  $match
      * @param  int  $count
      * @return array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zscan(mixed $key, mixed &$iterator, mixed $match = null, int $count = 0): array|false {}
 
     /**
      * Returns all keys matching pattern.
      *
      * @param  mixed  $pattern
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function keys(mixed $pattern): Relay|array|false {}
 
     /**
+     * Interact with Valkey's COMMANDLOG command.
+     *
+     * @param  string  $subcmd
+     * @param  mixed  $args...
+     * @return Relay|array|int|bool
+     */
+    #[Attributes\ValkeyCommand]
+    public function commandlog(string $subcmd, mixed ...$args): Relay|array|int|bool {}
+
+    /**
      * Interact with the Redis slowlog.
      *
      * @param  string  $operation
      * @param  string  $extra_args,...
      * @return Relay|array|int|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function slowlog(string $operation, string ...$extra_args): Relay|array|int|bool {}
 
     /**
      * Returns all the members of the set value stored at `$key`.
      *
      * @param  mixed  $set
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function smembers(mixed $set): Relay|array|false {}
 
     /**
      * Returns if `$member` is a member of the set stored at `$key`.
@@ -3086,9 +3390,9 @@
      * @param  mixed  $set
      * @param  mixed  $member
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function sismember(mixed $set, mixed $member): Relay|bool {}
 
     /**
      * Returns whether each member is a member of the set stored at `$key`.
@@ -3096,9 +3400,9 @@
      * @param  mixed  $set
      * @param  mixed  $members,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function smismember(mixed $set, mixed ...$members): Relay|array|false {}
 
     /**
      * Remove the specified members from the set stored at `$key`.
@@ -3107,9 +3411,9 @@
      * @param  mixed  $member
      * @param  mixed  $members,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function srem(mixed $set, mixed $member, mixed ...$members): Relay|int|false {}
 
     /**
      * Add the specified members to the set stored at `$key`.
@@ -3118,9 +3422,9 @@
      * @param  mixed  $member
      * @param  mixed  $members,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function sadd(mixed $set, mixed $member, mixed ...$members): Relay|int|false {}
 
     /**
      * Sort the elements in a list, set or sorted set.
@@ -3128,9 +3432,9 @@
      * @param  mixed  $key
      * @param  array  $options
      * @return Relay|array|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function sort(mixed $key, array $options = []): Relay|array|int|false {}
 
     /**
      * Sort the elements in a list, set or sorted set. Read-only variant of SORT.
@@ -3138,9 +3442,9 @@
      * @param  mixed  $key
      * @param  array  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function sort_ro(mixed $key, array $options = []): Relay|array|false {}
 
     /**
      * Move member from the set at source to the set at destination.
@@ -3149,9 +3453,9 @@
      * @param  mixed  $dstset
      * @param  mixed  $member
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function smove(mixed $srcset, mixed $dstset, mixed $member): Relay|bool {}
 
     /**
      * Removes and returns one or more random members from the set value store at `$key`.
@@ -3159,9 +3463,9 @@
      * @param  mixed  $set
      * @param  int  $count
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function spop(mixed $set, int $count = 1): mixed {}
 
     /**
      * Returns one or multiple random members from a set.
@@ -3169,18 +3473,18 @@
      * @param  mixed  $set
      * @param  int  $count
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function srandmember(mixed $set, int $count = 1): mixed {}
 
     /**
      * Returns the set cardinality (number of elements) of the set stored at `$key`.
      *
      * @param  mixed  $key
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function scard(mixed $key): Relay|int|false {}
 
     /**
      * Execute a script management command.
@@ -3188,18 +3492,18 @@
      * @param  string  $command
      * @param  string  $args,...
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function script(string $command, string ...$args): mixed {}
 
     /**
      * Returns the length of the string value stored at `$key`.
      *
      * @param  mixed  $key
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function strlen(mixed $key): Relay|int|false {}
 
     /**
      * This command swaps two Redis databases,
@@ -3209,41 +3513,188 @@
      * @param  int  $index1
      * @param  int  $index2
      * @return Relay|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function swapdb(int $index1, int $index2): Relay|bool {}
 
     /**
      * Returns the number of fields contained in the hash stored at `$key`.
      *
      * @param  mixed  $key
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function hlen(mixed $key): Relay|int|false {}
 
     /**
      * Returns the length of the list stored at `$key`.
      *
      * @param  mixed  $key
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function llen(mixed $key): Relay|int|false {}
 
     /**
+     * Add an element to a vector set.
+     *
+     * @param  mixed  $key
+     * @param  array  $values
+     * @param  mixed  $element
+     * @param  array|null  $options
+     * @return Relay|int|false
+     */
+    #[Attributes\RedisCommand]
+    public function vadd(mixed $key, array $values, mixed $element, ?array $options = null): Relay|int|false {}
+
+    /**
+     * Return the cardinality (number of elements) in a vector set.
+     *
+     * @param  mixed  $key
+     * @return Relay|int|false
+     */
+    #[Attributes\RedisCommand]
+    public function vcard(mixed $key): Relay|int|false {}
+
+    /**
+     * Return the dimensionality of vectors in a vector set.
+     *
+     * @param  mixed  $key
+     * @return Relay|int|false
+     */
+    #[Attributes\RedisCommand]
+    public function vdim(mixed $key): Relay|int|false {}
+
+    /**
+     * Get the embedding for a given vector set member.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $element
+     * @param  bool  $raw
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function vemb(mixed $key, mixed $element, bool $raw = false): Relay|array|false {}
+
+    /**
+     * Get any attributes for a given vector set member.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $element
+     * @param  bool  $raw
+     * @return Relay|array|string|false
+     */
+    #[Attributes\RedisCommand]
+    public function vgetattr(mixed $key, mixed $element, bool $raw = false): Relay|array|string|false {}
+
+    /**
+     * Return metadata about a vector set.
+     *
+     * @param  mixed  $key
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function vinfo(mixed $key): Relay|array|false {}
+
+    /**
+     * Returns whether or not the element is a member of a vectorset.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $element
+     * @return Relay|bool
+     */
+    #[Attributes\RedisCommand]
+    public function vismember(mixed $key, mixed $element): Relay|bool {}
+
+    /**
+     * Get neighbors for a given vector element optionally withscores.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $element
+     * @param  bool  $withscores
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function vlinks(mixed $key, mixed $element, bool $withscores): Relay|array|false {}
+
+    /**
+     * Get one or more random members from a vector set.
+     *
+     * @param  mixed  $key
+     * @param  int  $count
+     * @return Relay|array|string|false
+     */
+    #[Attributes\RedisCommand]
+    public function vrandmember(mixed $key, int $count = 0): Relay|array|string|false {}
+
+    /**
+     * Get a lexicographical range of elements from a vector set.
+     *
+     * @param  mixed  $key
+     * @param  string  $min
+     * @param  string  $max
+     * @param  int  $count = 0
+     */
+    #[Attributes\RedisCommand]
+    public function vrange(mixed $key, string $min, string $max, int $count = -1): Relay|array|false {}
+
+    /**
+     * Remove an element from a vector set.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $element
+     * @return Relay|int|false
+     */
+    #[Attributes\RedisCommand]
+    public function vrem(mixed $key, mixed $element): Relay|int|false {}
+
+    /**
+     * Set attributes for a given vector set member.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $element
+     * @param  array|string  $attributes
+     * @return Relay|int|false
+     */
+    #[Attributes\RedisCommand]
+    public function vsetattr(mixed $key, mixed $element, array|string $attributes): Relay|int|false {}
+
+    /**
+     * Do a similarity search on encodings or an element of a vector set.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $member
+     * @param  array|null  $options
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function vsim(mixed $key, mixed $member, array|null $options = null): Relay|array|false {}
+
+    /**
      * Acknowledge one or more IDs as having been processed by the consumer group.
      *
      * @param  mixed  $key
      * @param  string  $group
      * @param  array  $ids
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xack(mixed $key, string $group, array $ids): Relay|int|false {}
 
     /**
+     * Awknowledge and delete one or more IDs in a stream.
+     *
+     * @param  string  $key
+     * @param  string  $group
+     * @param  array  $ids
+     * @param  string|null  $mode
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function xackdel(string $key, string $group, array $ids, ?string $mode = null): Relay|array|false {}
+
+    /**
      * Append a message to a stream.
      *
      * @param  string  $key
      * @param  string  $id
@@ -3271,9 +3722,9 @@
      * @param  array  $ids
      * @param  array  $options
      * @return Relay|array|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xclaim(
         string $key,
         string $group,
         string $consumer,
@@ -3282,9 +3733,9 @@
         array $options
     ): Relay|array|bool {}
 
     /**
-     * Automatically take ownership of stream message(s) by metrics
+     * Automatically take ownership of stream message(s) by metrics.
      *
      * @param  string  $key
      * @param  string  $group
      * @param  string  $consumer
@@ -3293,9 +3744,9 @@
      * @param  int  $count
      * @param  bool  $justid
      * @return Relay|array|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xautoclaim(
         string $key,
         string $group,
         string $consumer,
@@ -3310,13 +3761,13 @@
      *
      * @param  string  $key
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xlen(string $key): Relay|int|false {}
 
     /**
-     * Perform utility operations having to do with consumer groups
+     * Perform utility operations having to do with consumer groups.
      *
      * @param  string  $operation
      * @param  mixed  $key
      * @param  string  $group
@@ -3324,9 +3775,9 @@
      * @param  bool  $mkstream
      * @param  int  $entries_read
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xgroup(
         string $operation,
         mixed $key = null,
         string $group = null,
@@ -3341,21 +3792,32 @@
      * @param  string  $key
      * @param  array  $ids
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xdel(string $key, array $ids): Relay|int|false {}
 
     /**
+     * Remove one or more IDs from a stream with optional mode argument.
+     *
+     * @param  string  $key
+     * @param  array  $ids
+     * @param  string|null  $mode
+     * @return Relay|array|false
+     */
+    #[Attributes\RedisCommand]
+    public function xdelex(string $key, array $ids, ?string $mode = null): Relay|array|false {}
+
+    /**
      * Retrieve information about a stream key.
      *
      * @param  string  $operation
      * @param  string|null  $arg1
      * @param  string|null  $arg2
      * @param  int  $count
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xinfo(string $operation, ?string $arg1 = null, ?string $arg2 = null, int $count = -1): mixed {}
 
     /**
      * Query pending entries in a stream.
@@ -3368,9 +3830,9 @@
      * @param  string|null  $consumer
      * @param  int  $idle
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xpending(
         string $key,
         string $group,
         ?string $start = null,
@@ -3388,9 +3850,9 @@
      * @param  string  $end
      * @param  int  $count = -1
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xrange(mixed $key, string $start, string $end, int $count = -1): Relay|array|false {}
 
     /**
      * Get a range of entries from a STREAM ke in reverse chronological order.
@@ -3400,9 +3862,9 @@
      * @param  string  $start
      * @param  int  $count
      * @return Relay|array|bool
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand]
     public function xrevrange(string $key, string $end, string $start, int $count = -1): Relay|array|bool {}
 
     /**
      * Read messages from a stream.
@@ -3411,9 +3873,9 @@
      * @param  int  $count
      * @param  int  $block
      * @return Relay|array|bool|null
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xread(array $streams, int $count = -1, int $block = -1): Relay|array|bool|null {}
 
     /**
      * Read messages from a stream using a consumer group.
@@ -3424,9 +3886,9 @@
      * @param  int  $count
      * @param  int  $block
      * @return Relay|array|bool|null
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xreadgroup(
         string $group,
         string $consumer,
         array $streams,
@@ -3443,9 +3905,9 @@
      * @param  bool  $minid
      * @param  int  $limit
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function xtrim(
         string $key,
         string $threshold,
         bool $approx = false,
@@ -3459,9 +3921,9 @@
      * @param  mixed  $key
      * @param  mixed  $args,...
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zadd(mixed $key, mixed ...$args): mixed {}
 
     /**
      * When called with just the key argument, return a random element from the sorted set value stored at key.
@@ -3470,9 +3932,9 @@
      * @param  mixed  $key
      * @param  array|null  $options
      * @return mixed
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zrandmember(mixed $key, ?array $options = null): mixed {}
 
     /**
      * Returns the specified range of elements in the sorted set stored at key.
@@ -3482,9 +3944,9 @@
      * @param  string|int  $end
      * @param  mixed  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function zrange(mixed $key, string|int $start, string|int $end, mixed $options = null): Relay|array|false {}
 
     /**
      * Returns the specified range of elements in the sorted set stored at key.
@@ -3494,9 +3956,9 @@
      * @param  int  $end
      * @param  mixed  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached, Attributes\Deprecated]
     public function zrevrange(mixed $key, int $start, int $end, mixed $options = null): Relay|array|false {}
 
     /**
      * Returns all the elements in the sorted set at key with a score between
@@ -3507,9 +3969,9 @@
      * @param  mixed  $end
      * @param  mixed  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached, Attributes\Deprecated]
     public function zrangebyscore(mixed $key, mixed $start, mixed $end, mixed $options = null): Relay|array|false {}
 
     /**
      * Returns all the elements in the sorted set at key with a score between
@@ -3520,9 +3982,9 @@
      * @param  mixed  $end
      * @param  mixed  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached, Attributes\Deprecated]
     public function zrevrangebyscore(mixed $key, mixed $start, mixed $end, mixed $options = null): Relay|array|false {}
 
     /**
      * Returns all the elements in the sorted set at key with a score between
@@ -3534,9 +3996,9 @@
      * @param  mixed  $end
      * @param  mixed  $options
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zrangestore(mixed $dst, mixed $src, mixed $start, mixed $end, mixed $options = null): Relay|int|false {}
 
     /**
      * When all the elements in a sorted set are inserted with the same score,
@@ -3549,9 +4011,9 @@
      * @param  int  $offset
      * @param  int  $count
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function zrangebylex(mixed $key, mixed $min, mixed $max, int $offset = -1, int $count = -1): Relay|array|false {}
 
     /**
      * When all the elements in a sorted set are inserted with the same score,
@@ -3564,9 +4026,9 @@
      * @param  int  $offset
      * @param  int  $count
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Deprecated]
     public function zrevrangebylex(mixed $key, mixed $max, mixed $min, int $offset = -1, int $count = -1): Relay|array|false {}
 
     /**
      * Returns the rank of member in the sorted set stored at key, with the scores
@@ -3577,9 +4039,9 @@
      * @param  mixed  $rank
      * @param  bool  $withscore
      * @return Relay|array|int|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zrank(mixed $key, mixed $rank, bool $withscore = false): Relay|array|int|null|false {}
 
     /**
      * Returns the rank of member in the sorted set stored at key, with the scores
@@ -3590,9 +4052,9 @@
      * @param  mixed  $rank
      * @param  bool  $withscore
      * @return Relay|array|int|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zrevrank(mixed $key, mixed $rank, bool $withscore = false): Relay|array|int|null|false {}
 
     /**
      * Removes the specified members from the sorted set stored at key.
@@ -3601,9 +4063,9 @@
      * @param  mixed  $key
      * @param  mixed  $args,...
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zrem(mixed $key, mixed ...$args): Relay|int|false {}
 
     /**
      * When all the elements in a sorted set are inserted with the same score,
@@ -3615,9 +4077,9 @@
      * @param  mixed  $min
      * @param  mixed  $max
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zremrangebylex(mixed $key, mixed $min, mixed $max): Relay|int|false {}
 
     /**
      * Removes all elements in the sorted set stored at key with rank between
@@ -3628,9 +4090,9 @@
      * @param  int  $start
      * @param  int  $end
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zremrangebyrank(mixed $key, int $start, int $end): Relay|int|false {}
 
     /**
      * Removes all elements in the sorted set stored at key with
@@ -3640,18 +4102,18 @@
      * @param  mixed  $min
      * @param  mixed  $max
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zremrangebyscore(mixed $key, mixed $min, mixed $max): Relay|int|false {}
 
     /**
      * Returns the sorted set cardinality (number of elements) of the sorted set stored at key.
      *
      * @param  mixed  $key
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand, \Relay\Attributes\Cached]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand, Attributes\Cached]
     public function zcard(mixed $key): Relay|int|false {}
 
     /**
      * Returns the number of elements in the sorted set at key with a score between min and max.
@@ -3660,9 +4122,9 @@
      * @param  mixed  $min
      * @param  mixed  $max
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zcount(mixed $key, mixed $min, mixed $max): Relay|int|false {}
 
     /**
      * This command is similar to ZDIFFSTORE, but instead of storing the
@@ -3671,9 +4133,9 @@
      * @param  array  $keys
      * @param  array  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zdiff(array $keys, ?array $options = null): Relay|array|false {}
 
     /**
      * Computes the difference between the first and all successive
@@ -3682,9 +4144,9 @@
      * @param  mixed  $dst
      * @param  array  $keys
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zdiffstore(mixed $dst, array $keys): Relay|int|false {}
 
     /**
      * Increments the score of member in the sorted set stored at key by increment.
@@ -3693,9 +4155,9 @@
      * @param  float  $score
      * @param  mixed  $mem
      * @return Relay|float|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zincrby(mixed $key, float $score, mixed $mem): Relay|float|false {}
 
     /**
      * When all the elements in a sorted set are inserted with the same score,
@@ -3706,9 +4168,9 @@
      * @param  mixed  $min
      * @param  mixed  $max
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zlexcount(mixed $key, mixed $min, mixed $max): Relay|int|false {}
 
     /**
      * Returns the scores associated with the specified members in the sorted set stored at key.
@@ -3716,9 +4178,9 @@
      * @param  mixed  $key
      * @param  mixed  $mems,...
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zmscore(mixed $key, mixed ...$mems): Relay|array|false {}
 
     /**
      * Returns the score of member in the sorted set at key.
@@ -3726,9 +4188,9 @@
      * @param  mixed  $key
      * @param  mixed  $member
      * @return Relay|float|null|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zscore(mixed $key, mixed $member): Relay|float|null|false {}
 
     /**
      * This command is similar to ZINTERSTORE, but instead of storing
@@ -3738,9 +4200,9 @@
      * @param  array  $weights
      * @param  mixed  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zinter(array $keys, ?array $weights = null, mixed $options = null): Relay|array|false {}
 
     /**
      * Intersect multiple sorted sets and return the cardinality of the result.
@@ -3748,9 +4210,9 @@
      * @param  array  $keys
      * @param  int  $limit
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zintercard(array $keys, int $limit = -1): Relay|int|false {}
 
     /**
      * Computes the intersection of numkeys sorted sets given by the
@@ -3761,9 +4223,9 @@
      * @param  array  $weights
      * @param  mixed  $options
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zinterstore(mixed $dst, array $keys, ?array $weights = null, mixed $options = null): Relay|int|false {}
 
     /**
      * This command is similar to ZUNIONSTORE, but instead of storing
@@ -3773,9 +4235,9 @@
      * @param  array  $weights
      * @param  mixed  $options
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zunion(array $keys, ?array $weights = null, mixed $options = null): Relay|array|false {}
 
     /**
      * Computes the union of numkeys sorted sets given by the
@@ -3786,9 +4248,9 @@
      * @param  array  $weights
      * @param  mixed  $options
      * @return Relay|int|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zunionstore(mixed $dst, array $keys, ?array $weights = null, mixed $options = null): Relay|int|false {}
 
     /**
      * Removes and returns up to count members with the lowest
@@ -3797,9 +4259,9 @@
      * @param  mixed  $key
      * @param  int  $count
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zpopmin(mixed $key, int $count = 1): Relay|array|false {}
 
     /**
      * Removes and returns up to count members with the highest
@@ -3808,24 +4270,98 @@
      * @param  mixed  $key
      * @param  int  $count
      * @return Relay|array|false
      */
-    #[\Relay\Attributes\RedisCommand]
+    #[Attributes\RedisCommand, Attributes\ValkeyCommand]
     public function zpopmax(mixed $key, int $count = 1): Relay|array|false {}
 
     /**
+     * Initialize a Redis CMS (Count-Min Sketch) by dimensions.
+     *
+     * @param  mixed  $key
+     * @param  int  $width
+     * @param  int  $depth
+     * @return Relay|bool
+     */
+    #[Attributes\RedisCommand]
+    public function cmsInitByDim(mixed $key, int $width, int $depth): Relay|bool {}
+
+    /**
+     * Initialize a Redis CMS (Count-Min Sketch) by desired probabilities.
+     *
+     * @param  mixed  $key
+     * @param  float  $error
+     * @param  float  $probability
+     * @return Relay|bool
+     */
+    #[Attributes\RedisCommand]
+    public function cmsInitByProb(mixed $key, float $error, float $probability): Relay|bool {}
+
+    /**
+     * Get information about a Count-Min Sketch key.
+     *
+     * @param  mixed  $key
+     * @return Relay|array
+     */
+    #[Attributes\RedisCommand]
+    public function cmsInfo(mixed $key): Relay|array|false {}
+
+    /**
+     * Increment one or more fields in a Count-Min Sketch key.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $field
+     * @param  int  $value
+     * @param  mixed  $fields_and_falues,...
+     * @return Relay|array
+     */
+    #[Attributes\RedisCommand]
+    public function cmsIncrBy(mixed $key, mixed $field, int $value, ...$fields_and_falues): Relay|array|false {}
+
+    /**
+     * Merge one or more Count-Min Sketch keys with optional weights.
+     *
+     * @param  mixed  $dstkey
+     * @param  array  $keys
+     * @param  array  $weights = []
+     */
+    public function cmsMerge(mixed $dstkey, array $keys, array $weights = []): Relay|bool {}
+
+    /**
+     * Query a Count-Min Sketch key.
+     *
+     * @param  mixed  $key
+     * @param  mixed  $fields,...
+     * @return Relay|array
+     */
+    #[Attributes\RedisCommand]
+    public function cmsQuery(mixed $key, ...$fields): Relay|array|false {}
+
+    /**
      * Returns keys cached in runtime memory.
      *
      * @internal Temporary debug helper. Do not use.
      * @return mixed
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public function _getKeys() {}
 
     /**
+     * Returns whether a key is tracked in memory.
+     *
+     * This can mean the entire key is cached in-memory or that we are tracking
+     * the existence or length of the key.
+     *
+     * @param  string  $key
+     * @return bool
+     */
+    #[Attributes\Local]
+    public function isTracked(string $key): bool {}
+
+    /**
      * Returns information about the license.
      *
      * @return array
      */
-    #[\Relay\Attributes\Local]
+    #[Attributes\Local]
     public static function license(): array {}
 }