# Redis and Valkey compatibility

> Which Redis 7 and 8 and Valkey 8 and 9 features HotKV supports, supports in part or does not support, and what HotKV adds.

URL: https://docs.hotkv.com/reference/compatibility/


HotKV follows the commands, replies and error messages of Redis 7 and 8 and
Valkey 8 and 9: it reports `8.4.0` as its Redis version in
[`HELLO`](https://docs.hotkv.com/reference/protocol/index.md#hello) and in `INFO` (`redis_version`), as
`compat-redis-version` sets it, so client libraries pick the right features.
Every command of Redis 7.x and Valkey 8.0 is available, apart from Sentinel,
the replication handshake (`SYNC`, `PSYNC`) and the few listed below as not
supported. Existing Redis clients, `redis-cli`,
and cluster tools work without changes.

The tables use three marks:

- **Supported**: behaves as in Redis and Valkey.
- **Partial**: available, with the differences explained.
- **Not supported**: not available; the HotKV alternative is given where there
  is one.

## Protocol and connections

| Feature | HotKV | Notes |
| --- | --- | --- |
| RESP2 | Supported | |
| RESP3 (`HELLO 3`) | Supported | Maps, sets, doubles, booleans, verbatim strings, nulls and push messages. HotKV never sends big numbers or attributes. See [Protocol](https://docs.hotkv.com/reference/protocol/index.md). |
| Inline commands | Partial | Arguments are split on spaces only; quotes are not interpreted. |
| TLS for clients | Supported | Including client certificates. See [TLS](https://docs.hotkv.com/operate/tls/index.md). |
| TLS on the cluster bus and replication | Supported | Always mutual TLS (`tls-cluster`, `tls-replication`). |
| Unix domain sockets | Not supported | `unixsocket` is accepted and ignored. Connect over TCP on the loopback interface. |
| Pipelining, `CLIENT REPLY`, `CLIENT PAUSE`, `CLIENT UNBLOCK`, `CLIENT KILL` (all filters), `CLIENT SETINFO`, `RESET` | Supported | |
| `MONITOR` | Supported | |
| Subscribed connections in RESP3 | Supported | A RESP3 connection with subscriptions can run any command. A RESP2 one can only run subscription commands, `PING`, `QUIT` and `RESET`. |
| Client-side caching (`CLIENT TRACKING`, `CACHING`, `GETREDIR`, `TRACKINGINFO`) | Supported | The default, `REDIRECT`, `BCAST`, `OPTIN`, `OPTOUT` and `NOLOOP` modes on RESP2 and RESP3, and `tracking-table-max-keys`. See [Client-side caching](https://docs.hotkv.com/develop/client-side-caching/index.md). |
| `maxmemory-clients`, `CLIENT NO-EVICT` | Supported | Closes the clients that hold the most when all clients hold more than the limit. See [Client memory](https://docs.hotkv.com/operate/memory-and-eviction/index.md#client-memory). |
| `CLIENT CAPA` (Valkey 8) | Not supported | |

## Data types

| Feature | HotKV | Notes |
| --- | --- | --- |
| Strings, lists, sets, hashes, sorted sets | Supported | |
| Streams and consumer groups | Supported | |
| Geospatial indexes | Supported | |
| Bitmaps and bitfields | Supported | |
| HyperLogLog | Supported | Same representation as Redis, so values move between the two with `DUMP` / `RESTORE`. |
| Hash field expiration (`HEXPIRE` and related, Redis 7.4) | Supported | `HGETDEL`, `HGETEX` and `HSETEX` (Redis 8) too. |
| Bloom filters (`BF.*`) | Supported | See [probabilistic types](https://docs.hotkv.com/data-types/probabilistic/index.md). |
| Count-Min sketch (`CMS.*`), Top-K (`TOPK.*`) | Supported | |
| Cuckoo filters (`CF.*`), t-digest (`TDIGEST.*`) | Not supported | |
| JSON, search and query, Redis 8 vector sets | Not supported | HotKV has its own [vector search](https://docs.hotkv.com/data-types/vector-search/index.md) (`VSIM.*`). |
| Time series | Not supported as in Redis | HotKV has its own `TS.*` commands, which are not the Redis time series command set. See [time series](https://docs.hotkv.com/data-types/time-series/index.md). |

## Scripting and transactions

| Feature | HotKV | Notes |
| --- | --- | --- |
| `EVAL`, `EVALSHA`, `EVAL_RO`, `EVALSHA_RO`, `SCRIPT LOAD / EXISTS / FLUSH / KILL` | Supported | |
| Functions (`FUNCTION`, `FCALL`, `FCALL_RO`) | Supported | Libraries are saved with the data and reach replicas. |
| Script flags (`#!lua flags=...`) | Supported | |
| Lua environment | Supported | Scripts see `redis`, `server` (the Valkey name) and `hotkv`, and the `cjson`, `cmsgpack`, `bit` and `struct` libraries. Scripts written for Redis run unchanged. |
| Lua debugger (`SCRIPT DEBUG YES` / `SYNC`) | Not supported | `SCRIPT DEBUG NO` is accepted. |
| `SCRIPT SHOW` (Valkey 8) | Not supported | |
| Transactions (`MULTI`, `EXEC`, `DISCARD`, `WATCH`) | Supported | |

## Persistence

| Feature | HotKV | Notes |
| --- | --- | --- |
| Snapshots (`SAVE`, `BGSAVE`, save points) | Partial | HotKV writes its own snapshot format (`dump.hkv` by default), which Redis cannot read. |
| Starting from Redis data | Supported | With no data of its own yet, HotKV loads a Redis `dump.rdb` and a Redis AOF (one file, or the Redis 7 multi-part directory) from `dir`. A key holding a module type stops the start. See [Migrating from Redis](https://docs.hotkv.com/get-started/migrate-from-redis/index.md). |
| Append-only file (`appendonly`, `appendfsync`, `BGREWRITEAOF`, automatic rewrites) | Partial | Same settings and guarantees. HotKV's AOF is one file in its own format. |
| `DUMP` / `RESTORE` | Supported | Redis payload format, so values can be copied between Redis and HotKV. |
| Encryption at rest | HotKV only | See [Persistence](https://docs.hotkv.com/persistence/index.md). |

## Replication and high availability

| Feature | HotKV | Notes |
| --- | --- | --- |
| Primary and replicas | Partial | HotKV replicas follow HotKV primaries over HotKV's own replication link, configured with `replication.*` ([Replication](https://docs.hotkv.com/operate/replication/index.md)). A HotKV server cannot replicate from Redis or to it. |
| `REPLICAOF` / `SLAVEOF` | Partial | `REPLICAOF NO ONE` promotes a replica. Pointing a server at a primary is done in the configuration, not with this command. `replicaof` in the configuration file stops the start with an explanation. |
| `WAIT`, `WAITAOF`, `ROLE` | Supported | |
| `FAILOVER` | Not supported | Replies with an error (`FAILOVER ABORT` replies OK). Promote a replica with [`REPLICATION.FAILOVER`](https://docs.hotkv.com/commands/replication-failover/index.md) or `REPLICAOF NO ONE`, or use [`CLUSTER FAILOVER`](https://docs.hotkv.com/commands/cluster-failover/index.md) in a cluster. |
| `min-replicas-to-write` | Supported | A primary with fewer connected replicas than the setting refuses writes with `NOREPLICAS Not enough good replicas to write.` |
| Sentinel | Not supported | Use [cluster mode](https://docs.hotkv.com/clustering/index.md), which detects failures and promotes replicas on its own, or see [High availability](https://docs.hotkv.com/operate/high-availability/index.md). |

## Cluster

| Feature | HotKV | Notes |
| --- | --- | --- |
| Redis Cluster protocol (16384 slots, `MOVED`, `ASK`, hash tags) | Supported | Cluster clients and `redis-cli --cluster` work as with Redis. |
| Automatic and manual failover | Supported | |
| `CLUSTER` subcommands of Redis 7 | Supported | Including `CLUSTER SHARDS`, `CLUSTER LINKS` and `CLUSTER MYSHARDID`. |
| `CLUSTER SLOT-STATS` (Valkey 8) | Supported | |
| Host names in redirects (`cluster-announce-hostname`, `cluster-preferred-endpoint-type`) | Supported | |
| Sharded pub/sub (`SSUBSCRIBE`, `SPUBLISH`) | Supported | |
| Several databases on a cluster node (Valkey 9's `cluster-databases`) | Supported | One database by default, as in Redis Cluster; `cluster-databases` (1 to 128, set at startup) gives a node more. `SWAPDB` is always refused on a cluster node. See [Databases in a cluster](https://docs.hotkv.com/clustering/keys-and-commands/index.md#databases). |
| Atomic slot migration: `CLUSTER MIGRATESLOTS` (Valkey 9) and `CLUSTER MIGRATION` (Redis 8.4) | Supported | `valkey-cli --cluster reshard --cluster-use-atomic-slot-migration` and `redis-cli` 8.4 or later use them. Slots also move with `CLUSTER SETSLOT` and `MIGRATE`, which older `redis-cli --cluster reshard` drives. See [Scaling a cluster](https://docs.hotkv.com/clustering/scaling/index.md). |
| `CLUSTERSCAN` (Valkey 9.1), `CLUSTER FLUSHSLOT` (Valkey 9), `SFLUSH` (Redis 8) | Supported | See [CLUSTERSCAN](https://docs.hotkv.com/commands/clusterscan/index.md), [CLUSTER FLUSHSLOT](https://docs.hotkv.com/commands/cluster-flushslot/index.md) and [SFLUSH](https://docs.hotkv.com/commands/sflush/index.md). |

## Security

| Feature | HotKV | Notes |
| --- | --- | --- |
| ACL (users, categories, key and channel patterns, selectors, `ACL LOG`, `ACL DRYRUN`, ACL file) | Supported | See [ACL](https://docs.hotkv.com/operate/acl/index.md). |
| `requirepass`, `AUTH`, protected mode | Supported | |
| `rename-command` | Not supported | Stops the start. Deny the command with an ACL rule instead. |
| `user` lines in the configuration file | Not supported | Stops the start. Put users in the [`aclfile`](https://docs.hotkv.com/reference/configuration/index.md#aclfile). |

## Operations and introspection

| Feature | HotKV | Notes |
| --- | --- | --- |
| `INFO`, `CONFIG GET / SET / REWRITE / RESETSTAT` | Supported | `CONFIG SET` covers the settings marked in the [configuration reference](https://docs.hotkv.com/reference/configuration/index.md). |
| `COMMAND` and its subcommands | Supported | |
| `SLOWLOG`, `LATENCY` (including `HISTOGRAM`), `MEMORY` | Supported | |
| Keyspace notifications | Supported | All classes, including `n` for new keys. |
| Eviction policies (all eight) | Supported | |
| `OBJECT ENCODING` | Partial | Reports the encoding Redis would use for the value under the `*-max-listpack-*` settings (`int`, `embstr`, `raw`, `listpack`, `listpackex`, `quicklist`, `intset`, `hashtable`, `skiplist`, `stream`). HotKV stores values its own way. |
| `OBJECT FREQ`, `IDLETIME`, `REFCOUNT` | Supported | |
| `DEBUG` | Partial | Off unless [`enable-debug-command`](https://docs.hotkv.com/reference/configuration/index.md#enable-debug-command) allows it. Offers the subcommands test suites use, such as `SLEEP`, `RELOAD`, `OBJECT`, `DIGEST`, `DIGEST-VALUE`, `POPULATE`, `SET-ACTIVE-EXPIRE`, `LOADAOF`, `LOG`, `RESTART` and `PAUSE-CRON` (accepted, with no effect); others are not available. |
| Modules (`MODULE LOAD`, `loadmodule`) | Not supported | `MODULE LIST` replies with an empty list. The common module data types are built in (see above). |
| Active defragmentation, lazy freeing, I/O threads | Not applicable | These settings are accepted and ignored: HotKV manages memory and threads its own way. |
| `COMMANDLOG` (Valkey 8.1) | Not supported | Use `SLOWLOG`. |

> **Note**
> A `redis.conf` from Redis 7 or Valkey 8 starts HotKV as it is, apart from the
> few directives that stop the start on purpose (`rename-command`, `user`,
> `loadmodule`, `sentinel`, `replicaof`). See
> [Mistakes and Redis settings](https://docs.hotkv.com/reference/configuration/index.md#mistakes-and-redis-settings).

## HotKV-only features

These have no Redis or Valkey equivalent. Some need a HotKV Cloud plan or an
On-Premise license; each page says which.

- AI caching: semantic cache (`SCACHE.*`), prompt cache (`PCACHE.*`),
  tool-call cache (`TOOL.CACHE.*`), negative cache (`NCACHE.*`), validated
  output cache (`GUARD.*`), rerank score cache (`RERANK.*`) and embedding
  deduplication (`EMBED.DEDUP.*`). See [AI features](https://docs.hotkv.com/ai-features/index.md).
- Agent memory (`AMEM.*`), LLM usage statistics (`LLMSTATS.*`) and budgets
  (`LLMBUDGET.*`), a prompt registry (`PROMPT.*`), RAG pipelines (`RAG.*`) and
  a feature store (`FEATURE.*`).
- Vector search (`VSIM.*`) and time series (`TS.*`).
- Rate limiting: `RATELIMIT.*` and the GCRA limiter `GCRA.LIMIT`.
- Key tags (`TAG.*`), see [tags](https://docs.hotkv.com/data-types/tags/index.md).
- Nanosecond expiry (`NEXPIRE`, `NEXPIREAT`, `NTTL`).
- Hot key tracking (`HOTKEYS`), see [hot keys](https://docs.hotkv.com/develop/hot-keys/index.md).
- Transparent value compression
  ([`compression-enabled`](https://docs.hotkv.com/reference/configuration/index.md#compression-enabled)).
- A Prometheus endpoint ([`metrics-port`](https://docs.hotkv.com/reference/configuration/index.md#metrics-port)).
- Encryption at rest (`ENCRYPTION.*`), a tamper-evident audit log
  (`AUDIT.*`), webhook alerts (`ALERTS`), multi-tenancy (`TENANT.*`) and
  replication control (`REPLICATION.*`).
- Configuration in TOML (`hotkv.toml`) as well as `hotkv.conf`.