Redis server errors
Every error message that the Redis 8.10 server returns
These are the error messages of the Redis server itself. Each one starts with an error code, also called the error prefix. Most use the general code ERR. The others have a code that names the kind of error, such as WRONGTYPE or MOVED.
When an error happens inside a Lua script or function, Redis adds where it happened to the message, such as script: <sha1>, on @user_script:1. Some messages only come from a server that runs as Redis Sentinel, or as part of a cluster.
Commands
WRONGTYPE
A command was used on a key that holds a different data type, or a HyperLogLog command was used on a string that isn't a HyperLogLog. See WRONGTYPE for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
WRONGTYPE Key is not a valid HyperLogLog string value. |
The key holds a string that isn't a HyperLogLog, so PFADD, PFCOUNT, and PFMERGE can't use it. Use another key name, or delete the string first; create HyperLogLog keys only with PFADD or PFMERGE. How to fix it |
PFADDPFCOUNTPFMERGE |
WRONGTYPE Operation against a key holding the wrong kind of value |
You ran a command on a key that holds a different data type, for example LPUSH on a string or VADD on a hash. Check the key's type with TYPE, then use a command for that type or a different key name. How to fix it |
Commands that use keys |
EXECABORT
A transaction was discarded, either because one of its commands couldn't be queued, or because Redis refused the EXEC command itself. See EXECABORT for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
EXECABORT Transaction discarded because of previous errors. |
Redis refused one of the commands you queued after MULTI, for example because of a typo or a wrong number of arguments, so EXEC discarded the whole transaction. Check the error that each queued command returned, fix that command, and send the transaction again. How to fix it |
EXEC |
EXECABORT Transaction discarded because of: <error> |
Redis refused the EXEC itself for the reason after the colon, such as missing permissions, low memory, or a read-only replica, and discarded the transaction without running any of its commands. Fix that cause, then send the whole transaction again. How to fix it |
EXEC |
NOSCRIPT
EVALSHA asked for a script that isn't in the server's script cache. See NOSCRIPT for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
NOSCRIPT No matching script. Please use EVAL. |
You called EVALSHA with a digest that isn't in the script cache, or isn't 40 characters long. The cache empties on restart, failover, and SCRIPT FLUSH, and Redis evicts old EVAL scripts, so load the script again with SCRIPT LOAD or EVAL, then retry. How to fix it |
EVALSHAEVALSHA_ |
BUSYKEY
RESTORE tried to create a key that already exists. See BUSYKEY for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
BUSYKEY Target key name already exists. |
RESTORE won't overwrite a key that already exists. Add the REPLACE option to overwrite it, or delete the key first. How to fix it |
RESTORE |
INVALIDOBJ
A HyperLogLog command, such as PFADD or PFCOUNT, found that the HyperLogLog stored in the key is corrupted. Redis stores a HyperLogLog as a string, so a string command such as SETRANGE or APPEND can damage it. To fix it, delete the key and add the elements again.
| Error message | Explanation | Returned by |
|---|---|---|
INVALIDOBJ Corrupted HLL object detected |
The HyperLogLog stored in the key is corrupted, usually because a string command such as SETRANGE or APPEND changed its bytes. Delete the key and add the elements again with PFADD. |
PFADDPFCOUNTPFMERGE |
IOERR
MIGRATE couldn't connect to the target server, or reading from it or writing to it failed or took too long. To fix it, check the host and port of the target, check that the target server is running and that this server can reach it, and pass a longer timeout if the keys are large.
| Error message | Explanation | Returned by |
|---|---|---|
IOERR error or timeout connecting to the client |
MIGRATE couldn't connect to the target server within the timeout. Despite the wording, client means the target server. Check its host and port, that it's running, and that this server can reach it. |
MIGRATE |
IOERR error or timeout reading to target instance |
MIGRATE connected to the target server, but reading its reply failed or took longer than the timeout. Check that the target is healthy, and pass a longer timeout for large keys. |
MIGRATE |
IOERR error or timeout writing to target instance |
MIGRATE connected to the target server, but sending the data failed or took longer than the timeout. Check the network and the target server, and pass a longer timeout for large keys. |
MIGRATE |
Scripts and functions
BUSY
A Lua script, function, or module command has run for too long, and Redis is blocked until it ends. See BUSY for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
BUSY <message> |
A module command has been running for a long time and blocks the server, and the text after BUSY comes from that module. Wait for the command to finish and retry. SHUTDOWN NOSAVE still works if you need to stop the server. How to fix it |
Any command |
BUSY Redis is busy running a module command. |
A module command has been running for a long time and blocks the server, so it accepts only a few commands. Wait for it to finish and retry. No command can stop it, apart from stopping the server with SHUTDOWN NOSAVE. How to fix it |
Any command |
BUSY Redis is busy running a script. You can only call FUNCTION KILL or SHUTDOWN NOSAVE. |
A function, run with FCALL, has run longer than busy-reply-threshold and blocks the server. Stop it with FUNCTION KILL if it hasn't written any data yet, or wait for it. SHUTDOWN NOSAVE stops the server without saving. How to fix it |
Any command |
BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE. |
A Lua script, run with EVAL or EVALSHA, has run longer than busy-reply-threshold and blocks the server. Stop it with SCRIPT KILL if it hasn't written any data yet, or wait for it. SHUTDOWN NOSAVE stops the server without saving. How to fix it |
Any command |
UNKILLABLE
SCRIPT KILL or FUNCTION KILL can't stop the script that's running. Either the script has already changed data, so stopping it would leave the change half done, or the script came from the primary through replication. See BUSY for your options.
| Error message | Explanation | Returned by |
|---|---|---|
UNKILLABLE Sorry the script already executed write commands against the dataset. You can either wait the script termination or kill the server in a hard way using the SHUTDOWN NOSAVE command. |
You ran SCRIPT KILL or FUNCTION KILL, but the running script has already changed data, so stopping it would leave the change half done. Wait for the script to finish, or run SHUTDOWN NOSAVE to stop the server without saving. How to fix it |
FUNCTION KILLSCRIPT KILL |
UNKILLABLE The busy script was sent by a master instance in the context of replication and cannot be killed. |
You ran SCRIPT KILL or FUNCTION KILL on a replica, but the busy script came from its primary through replication, and a replica never stops a script that its primary sent. Wait for the script to finish. How to fix it |
FUNCTION KILLSCRIPT KILL |
NOTBUSY
You ran SCRIPT KILL or FUNCTION KILL, but no script or function is running. It may have finished already, so there's nothing to stop.
| Error message | Explanation | Returned by |
|---|---|---|
NOTBUSY No scripts in execution right now. |
You ran SCRIPT KILL or FUNCTION KILL, but no script or function is running, so there's nothing to stop. It may have finished already. |
FUNCTION KILLSCRIPT KILL |
Clusters
MOVED
The key belongs to a hash slot that another cluster node serves. See MOVED for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
MOVED <slot> <endpoint>:<port> |
The key's hash slot, shown in the message, is served by another node, at the address in the message. Send the command to that node. Cluster-aware clients follow this redirect and update their slot map for you. How to fix it | Commands that use keys |
ASK
The key's hash slot is moving to another cluster node, and the key may already be there. See ASK for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
ASK <slot> <endpoint>:<port> |
The key's hash slot, shown in the message, is moving to the node at the address in the message, and the key may already be there. Send ASKING and then the command to that node, once. Cluster-aware clients do this for you. How to fix it |
Commands that use keys |
CROSSSLOT
A command used keys that belong to different hash slots. See CROSSSLOT for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
CROSSSLOT Keys in request don't hash to the same slot |
The command uses several keys that belong to different hash slots, which a cluster can't serve in one command. Put the keys in the same slot with a hash tag, such as {user1}:name and {user1}:email, or send one command per key. How to fix it |
Commands that use several keys |
TRYAGAIN
A command with several keys ran while their hash slot was moving between nodes, or a write reached a node while it was deleting all the keys of that slot. See TRYAGAIN for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
TRYAGAIN Multiple keys request during rehashing of slot |
The command uses several keys in a hash slot that's moving between nodes, and not all of the keys are on this node. Wait a moment and send the command again. The move usually finishes soon. How to fix it | Commands that use several keys |
TRYAGAIN Slot is being trimmed |
You sent a write to a node that's deleting all the keys of that hash slot, for example because the slot moved to another node. Wait for the deletion to finish, then retry. The slot may now be served by another node. How to fix it | Commands that write data |
CLUSTERDOWN
The cluster can't serve the command because a hash slot has no working node. See CLUSTERDOWN for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
CLUSTERDOWN Hash slot not served |
The command uses a key whose hash slot isn't assigned to any node, so no node can serve it. Check the slot coverage with CLUSTER SLOTS, and assign the missing slots with CLUSTER ADDSLOTS or CLUSTER ADDSLOTSRANGE. How to fix it |
Commands that use keys |
CLUSTERDOWN The cluster is down |
The cluster is in the failed state, for example because some hash slots have no working node, so this node refuses commands that use keys. Fix the failed nodes or the slot coverage. To keep serving reads meanwhile, set cluster-allow-reads-when-down to yes. How to fix it |
Commands that use keys |
CLUSTERDOWN The cluster is down and only accepts read commands |
The cluster is in the failed state, and because cluster-allow-reads-when-down is yes, this node still serves reads but refuses writes. Fix the failed nodes or the slot coverage, then retry the write. How to fix it |
Commands that write data |
NOTREADY
The nodes of a cluster send each other CLUSTER SYNCSLOTS while they move hash slots. A node returns this error when it isn't ready to move slots yet. Apps don't send this command, so you only see this error in the logs of cluster tools.
| Error message | Explanation | Returned by |
|---|---|---|
NOTREADY Cluster is not ready to migrate slots |
The source node isn't ready to start moving the slots yet, so the importing node tries again later by itself. You see this only in logs. If it doesn't clear, check the source node's log. | CLUSTER SYNCSLOTS |
Memory and persistence
OOM
Redis has reached its memory limit and can't make room for new data. See OOM for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
OOM allow-oom flag is not set on the script, can not run it when used memory > 'maxmemory' |
Redis is over its maxmemory limit, and the script or function you called has neither the allow-oom nor the no-writes flag. Free memory or raise maxmemory; if the code only reads, add no-writes so it can run anyway. How to fix it |
EVALEVALSHAFCALLFCALL_ |
OOM command not allowed when used memory > 'maxmemory'. |
Redis has reached its maxmemory limit and couldn't free enough memory by evicting keys, so it refuses commands that can add data. Delete keys you don't need, raise maxmemory, or set a maxmemory-policy that can evict your keys. How to fix it |
Commands that write data |
OOM command not allowed when used memory > 'maxmemory'. script: <script>, on <source>:<line>. |
Your script called a command that can add data while Redis is over its maxmemory limit and can't evict keys to make room. Free memory, raise maxmemory, or choose a maxmemory-policy that evicts keys, then retry. How to fix it |
EVALEVALSHAEVAL_ |
MISCONF
Redis stopped accepting writes because it couldn't save your data to disk. See MISCONF for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
MISCONF Errors writing to the AOF file: <reason> |
Redis couldn't write or sync its append-only file (AOF), so it refuses write commands and PING until a write succeeds. The end of the message gives the operating system's reason, such as a full disk; once you fix it, Redis accepts writes again. How to fix it |
Commands that write data |
MISCONF Errors writing to the AOF file: <reason> script: <script>, on <source>:<line>. |
Your script tried to write while Redis can't write to its append-only file (AOF), for the reason shown, such as a full disk. Redis refuses writes until the AOF works again, so fix the cause that the Redis log gives, then retry. How to fix it | EVALEVALSHAEVAL_ |
MISCONF Redis is configured to persist data to AOF, but it's currently unable to persist to disk. Writable scripts are blocked. Use 'no-writes' flag for read only scripts. AOF error: <reason> |
Redis can't write to its append-only file (AOF), for the reason at the end of the message, so it refuses scripts and functions that may write. Fix the disk problem; if the code only reads, add the no-writes flag so it can still run. How to fix it |
EVALEVALSHAFCALLFCALL_ |
MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. |
The last background snapshot (RDB file) failed, and stop-writes-on-bgsave-error is yes, so Redis refuses write commands and PING. Check the Redis log for the reason and fix it, then run BGSAVE; writes work again once a snapshot succeeds. How to fix it |
Commands that write data |
MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. script: <script>, on <source>:<line>. |
Your script tried to write after the last snapshot failed, and stop-writes-on-bgsave-error makes Redis refuse writes until saving works again. Find the reason in the Redis log, fix it, and run BGSAVE; when it succeeds, writes work again. How to fix it |
EVALEVALSHAEVAL_ |
MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Writable scripts are blocked. Use 'no-writes' flag for read only scripts. |
The last snapshot failed, and stop-writes-on-bgsave-error is on, so Redis refuses scripts and functions that may write. Fix the cause that the Redis log gives and run BGSAVE; if the code only reads, add the no-writes flag so it can still run. How to fix it |
EVALEVALSHAFCALLFCALL_ |
Connections and security
NOAUTH
The server requires a password, and the connection hasn't authenticated. See NOAUTH for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
NOAUTH Authentication required. |
The server requires a password, and this connection hasn't authenticated yet. Send AUTH with your password, or with your user name and password, before other commands, or set them in your client's connection settings. How to fix it |
Any command |
NOAUTH HELLO must be called with the client already authenticated, otherwise the HELLO <proto> AUTH <user> <pass> option can be used to authenticate the client and select the RESP protocol version at the same time |
The server requires authentication, and you sent HELLO on a connection that hasn't authenticated. Add AUTH with a user name and password to the same command, as in HELLO 3 AUTH default mypassword, or run AUTH first. How to fix it |
HELLO |
WRONGPASS
The username or password is wrong, or the user is disabled. See WRONGPASS for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
WRONGPASS invalid internal password |
A connection authenticated as internal connection, the username that cluster nodes use with each other, but the secret it sent doesn't match this cluster's internal secret. Apps should authenticate as a normal user instead. How to fix it |
AUTH |
WRONGPASS invalid username-password pair or user is disabled. |
AUTH or HELLO failed because the user doesn't exist, the password is wrong, or the user is disabled. Check the username and password that your client sends, and as an administrator check the user with ACL GETUSER. How to fix it |
AUTHHELLO |
NOPERM
The user is authenticated but isn't allowed to run the command, use the key, or use the channel. See NOPERM for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
NOPERM ACLs rules changed between the moment the transaction was accumulated and the EXEC call. This command is no longer allowed for the following reason: no permission |
The access control list (ACL) rules for your user changed between queueing this command and EXEC, and the user can no longer run it. Redis skips that command but runs the others in the transaction; restore the permission or update your app, then retry. How to fix it |
EXEC |
NOPERM ACLs rules changed between the moment the transaction was accumulated and the EXEC call. This command is no longer allowed for the following reason: no permission to access one of the channels used as arguments |
The access control list (ACL) rules for your user changed after you queued this command, and the user can no longer use one of its Pub/Sub channels. Redis skips that command but runs the rest of the transaction; grant the channel with ACL SETUSER, or remove the command. How to fix it |
EXEC |
NOPERM ACLs rules changed between the moment the transaction was accumulated and the EXEC call. This command is no longer allowed for the following reason: no permission to execute the command or subcommand |
The access control list (ACL) rules for your user changed after you queued this command, and the user can no longer run that command or subcommand. Redis skips it but runs the rest of the transaction; grant the command with ACL SETUSER, or remove it. How to fix it |
EXEC |
NOPERM ACLs rules changed between the moment the transaction was accumulated and the EXEC call. This command is no longer allowed for the following reason: no permission to touch the specified keys |
The access control list (ACL) rules for your user changed after you queued this command, and the user can no longer access one of the keys it uses. Redis skips it but runs the rest of the transaction; grant the key pattern with ACL SETUSER, or remove the command. How to fix it |
EXEC |
NOPERM No permissions to access a channel |
Your user's access control list (ACL) rules don't allow the channel you used, for example in PUBLISH or SUBSCRIBE. Run ACL LOG to see which channel was refused, then allow it with a & pattern in ACL SETUSER. How to fix it |
Commands that use channels |
NOPERM No permissions to access a key |
Your user's access control list (ACL) rules don't allow a key in the command, or the read or write access the command needs. Run ACL LOG to see which key was refused, then allow it with a ~ or % pattern in ACL SETUSER. How to fix it |
Commands that use keys |
NOPERM User <username> has no permissions to run the '<command>' command |
The user in the message is authenticated but isn't allowed to run that command. Connect as a user that has the permission, or allow the command with ACL SETUSER, for example +set or a category such as +@write. How to fix it |
Any command |
DENIED
Protected mode refused a connection from another computer, because the server has no password. See DENIED for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
DENIED Redis is running in protected mode because protected mode is enabled and no password is set for the default user. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Set up an authentication password for the default user. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside. |
Redis refused your connection because protected mode is on, the default user has no password, and you connected from another computer. Set a password for the default user, or turn off protected-mode only if the server can't be reached from the internet. How to fix it |
New connections |
NOPROTO
HELLO asked for a version of the Redis serialization protocol (RESP) that the server doesn't support. Redis supports versions 2 and 3. To fix it, send HELLO 2 or HELLO 3.
| Error message | Explanation | Returned by |
|---|---|---|
NOPROTO unsupported protocol version |
You asked HELLO for a protocol version that Redis doesn't support. Redis supports versions 2 and 3, so send HELLO 2 or HELLO 3. |
HELLO |
Replication and server state
READONLY
A command that changes data was sent to a read-only replica. See READONLY for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
READONLY Can not run script with write flag on readonly replica |
You called a script or function without the no-writes flag on a read-only replica, which refuses anything that may write. Send it to the primary, or add no-writes if the code only reads. How to fix it |
EVALEVALSHAFCALLFCALL_ |
READONLY You can't write against a read only replica. |
You sent a write command to a replica, which accepts only reads while replica-read-only is yes. Send writes to the primary. After a failover, your client may still be connected to a node that has become a replica. How to fix it |
Commands that write data |
READONLY You can't write against a read only replica. script: <script>, on <source>:<line>. |
Your script called a command that writes, but the server is a read-only replica. Send scripts that write to the primary, and run only read-only scripts on replicas, for example with EVAL_RO. How to fix it |
EVALEVALSHAEVAL_ |
MASTERDOWN
A replica lost its link to its primary and is set not to serve data that may be out of date. See MASTERDOWN for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
MASTERDOWN Link with MASTER is down and replica-serve-stale-data is set to 'no'. |
This replica lost its link to the primary, and replica-serve-stale-data is no, so it refuses commands that read or write data. Wait for the link to recover and check the primary and the network, or set replica-serve-stale-data to yes to serve possibly outdated data. How to fix it |
Commands that use keys |
MASTERDOWN Link with MASTER is down, replica-serve-stale-data is set to 'no' and 'allow-stale' flag is not set on the script. |
This replica lost its link to the primary, replica-serve-stale-data is no, and your script or function doesn't have the allow-stale flag. Wait for the link to recover, or add allow-stale if the code can safely run on outdated data. How to fix it |
EVALEVALSHAFCALLFCALL_ |
NOREPLICAS
The primary accepts writes only when enough replicas are connected, and there aren't enough. See NOREPLICAS for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
NOREPLICAS Not enough good replicas to write. |
The primary has fewer connected replicas than min-replicas-to-write requires, counting only those whose lag is within min-replicas-max-lag seconds, so it refuses writes. Check your replicas with INFO replication, or lower min-replicas-to-write. How to fix it |
Commands that write data |
NOREPLICAS Not enough good replicas to write. script: <script>, on <source>:<line>. |
Your script tried to write while the primary has fewer good replicas than min-replicas-to-write requires, so Redis refused the write. Check your replicas with INFO replication, or lower min-replicas-to-write. How to fix it |
EVALEVALSHAEVAL_ |
LOADING
Redis is still loading its data into memory and can't serve the command yet. See LOADING for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
LOADING Redis is loading the dataset in memory |
Redis is loading its data into memory, after a restart or from its primary, and can't run this command yet. Wait and retry. INFO persistence shows the loading progress. How to fix it |
Any command |
UNBLOCKED
A blocking command, such as BLPOP, stopped waiting before it got a result. Either another client stopped it with CLIENT UNBLOCK and the ERROR option, or the server became a replica while the command was waiting, for example, during a failover. To fix it, send the command again. If the server became a replica, send it to the new primary.
| Error message | Explanation | Returned by |
|---|---|---|
UNBLOCKED client unblocked via CLIENT UNBLOCK |
Another connection ended your blocking command, such as BLPOP or XREAD, early with CLIENT UNBLOCK and the ERROR option. Send the command again if you still need its result. |
Blocking commands |
UNBLOCKED force unblock from blocking operation, instance state changed (master -> replica?) |
Your blocking command, such as BLPOP or XREAD with BLOCK, was stopped because the server became a replica while you waited, for example during a failover. Redis also closes the connection. Reconnect to the new primary and send the command again. |
Blocking commands |
Streams
NOGROUP
A stream command named a consumer group or stream that doesn't exist. See NOGROUP for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
NOGROUP No such consumer group '<group>' for key name '<key>' |
The stream named in the message has no consumer group with that name. Check the group name, which is case-sensitive, or create the group with XGROUP CREATE; XINFO GROUPS lists the existing groups. How to fix it |
XGROUP CREATECONSUMERXGROUP DELCONSUMERXGROUP SETIDXINFO CONSUMERS |
NOGROUP No such key '<key>' or consumer group '<group>' |
Either the stream key doesn't exist, or it has no consumer group with that name. Check both names, and create the group with XGROUP CREATE, adding MKSTREAM if the stream doesn't exist yet. How to fix it |
XNACKXPENDINGXCLAIMXAUTOCLAIM |
NOGROUP No such key '<key>' or consumer group '<group>' in XREADGROUP with GROUP option |
XREADGROUP can't read, because the stream key doesn't exist or has no group with that name. Create the group with XGROUP CREATE, with MKSTREAM if needed. Groups are lost when the stream key is deleted, for example when it expires. How to fix it |
XREADGROUP |
BUSYGROUP
XGROUP CREATE tried to create a consumer group that already exists. See BUSYGROUP for how to fix it.
| Error message | Explanation | Returned by |
|---|---|---|
BUSYGROUP Consumer Group name already exists |
XGROUP CREATE named a consumer group that already exists on this stream. Use the existing group, choose another name, or delete the group first with XGROUP DESTROY. Apps that create their groups at startup often treat this error as success. How to fix it |
XGROUP CREATE |
Redis Sentinel
These errors only come from a server that runs as Redis Sentinel.
INPROG
SENTINEL FAILOVER asked for a failover of a primary that's already failing over. Wait for the running failover to finish.
| Error message | Explanation | Returned by |
|---|---|---|
INPROG Failover already in progress |
You ran SENTINEL FAILOVER, but a failover of that primary is already running. Wait for it to finish, then check the new primary with SENTINEL GET-MASTER-ADDR-BY-NAME. |
SENTINEL FAILOVER |
NOGOODSLAVE
SENTINEL FAILOVER found no replica that it can promote to primary. For example, the replicas are disconnected, or their replica-priority is 0, which means they must never be promoted. To fix it, check the replicas with SENTINEL REPLICAS <primary-name>, and bring at least one of them back.
| Error message | Explanation | Returned by |
|---|---|---|
NOGOODSLAVE No suitable replica to promote |
You ran SENTINEL FAILOVER, but no replica of the primary can be promoted: there are none, or they're down, disconnected, not answering, or have replica-priority set to 0. Check the replicas with SENTINEL REPLICAS. |
SENTINEL FAILOVER |
NOQUORUM
SENTINEL CKQUORUM found that not enough Sentinels are reachable. Either there are too few to reach the quorum that you set for this primary, or too few to form the majority that must authorize a failover. To fix it, check that your Sentinels are running and can reach each other.
| Error message | Explanation | Returned by |
|---|---|---|
NOQUORUM <count> usable Sentinels. Not enough available Sentinels to reach the majority and authorize a failover |
SENTINEL CKQUORUM found that a majority of the Sentinels that know this primary isn't reachable, so they couldn't authorize a failover. The number in the message counts the reachable Sentinels, including this one; bring the others back or fix the network between them. |
SENTINEL CKQUORUM |
NOQUORUM <count> usable Sentinels. Not enough available Sentinels to reach the specified quorum for this master |
SENTINEL CKQUORUM found fewer reachable Sentinels than the quorum set for this primary, so they couldn't agree that it's down. The number in the message counts the reachable Sentinels, including this one; start more Sentinels, fix their connections, or lower the quorum with SENTINEL SET. |
SENTINEL CKQUORUM |
NOQUORUM <count> usable Sentinels. Not enough available Sentinels to reach the specified quorum for this master. Not enough available Sentinels to reach the majority and authorize a failover |
SENTINEL CKQUORUM found too few reachable Sentinels to reach this primary's quorum or to form the majority that authorizes a failover. The number in the message counts the reachable Sentinels, including this one; bring more Sentinels online or fix the network. |
SENTINEL CKQUORUM |
ERR
ERR is the general-purpose code. The description after it says what went wrong, and it usually names the command, argument, or setting at fault. Five common ERR errors have their own pages:
ERR unknown commandERR wrong number of argumentsERR syntax errorERR value is not an integer or out of rangeERR max number of clients reached
For any other ERR error, compare your command with the syntax on its command page. Most of these messages are listed with the commands that return them.
| Error message | Explanation | Returned by |
|---|---|---|
ERR '<filename>:<line>: username '<username>' contains invalid characters. |
ACL LOAD found a username in the access control list (ACL) file that contains a whitespace character, such as a tab, or a null character. Fix the user line at the line number in the message and run ACL LOAD again. No users were changed. |
ACL LOAD |
ERR '<option>' must not contain control characters |
You ran SENTINEL CONFIG SET with a value for the option named in the message that contains a control character, such as a newline or a tab. Remove the control characters from the value. |
SENTINEL CONFIG |
ERR <filename>:<line> should start with user keyword followed by the username. |
A line in the access control list (ACL) file doesn't start with the lowercase keyword user followed by a username, as every line other than comments and blank lines must. Fix the line named in the message and run ACL LOAD again. |
ACL LOAD |
ERR <filename>:<line>: <reason>. |
A rule on that line of the access control list (ACL) file is invalid, and the text after the line number says why, for example Syntax error or a bad password hash. Fix the rule and run ACL LOAD again. No users were changed. |
ACL LOAD |
ERR <filename>:<line>: Error in applying operation '<operation>': Unknown command or category name in ACL. |
A rule on that line of the access control list (ACL) file names a command or category that this server doesn't know, for example a misspelled command or one from a module that isn't loaded. Fix or remove that rule and run ACL LOAD again. |
ACL LOAD |
ERR <filename>:<line>: unbalanced quotes in acl line. |
ACL LOAD reports this when it can't split a line of the access control list (ACL) file into words. Redis 8.10 splits these lines on spaces and doesn't treat quotes specially, so this normally doesn't appear. If it does, check that line for stray characters. |
ACL LOAD |
ERR <filename>:<line>: Unmatched parenthesis in selector definition. |
A selector on that line of the access control list (ACL) file starts with ( but is never closed with ). Close the selector, for example (~app:* +get), and run ACL LOAD again. No users were changed. |
ACL LOAD |
ERR <option> cannot contain spaces, newlines or special characters. |
The value you passed to CLIENT SETINFO for the option in the message, lib-name or lib-ver, has a space, a newline, or another character that isn't plain and visible. Use only unaccented letters, digits, and punctuation, such as redis-py or 5.0.1. |
CLIENT SETINFO |
ERR A backup is already in progress, ABORT it first |
You ran BACKUP START while another backup is still being made. Finish it with BACKUP SEAL or cancel it with BACKUP ABORT, then start again. BACKUP STATUS shows its state. |
BACKUP START |
ERR A client can only redirect to a single other client |
You passed REDIRECT more than once to CLIENT TRACKING. Invalidation messages can go to only one other connection, so give a single REDIRECT with that connection's client ID. |
CLIENT TRACKING |
ERR A sealed backup exists, CLEANUP it first |
A sealed backup is still in the backup directory, so BACKUP START won't replace it. Copy its files, which BACKUP LIST shows, then run BACKUP CLEANUP and start the new backup. |
BACKUP START |
ERR ACL failure in script: No permissions to access a channel script: <script>, on <source>:<line>. |
A script or function used a channel, for example with PUBLISH, that your user's access control list (ACL) rules don't allow. Scripts run with the caller's permissions. Allow the channel with a & pattern in ACL SETUSER, or call the script as a user with access. How to fix it |
EVALEVALSHAEVAL_ |
ERR ACL failure in script: No permissions to access a key script: <script>, on <source>:<line>. |
A script or function used a key that your user's access control list (ACL) rules don't allow. Scripts run with the caller's permissions. Allow the key with a ~ pattern in ACL SETUSER, or run the script as a user that has access. How to fix it |
EVALEVALSHAEVAL_ |
ERR ACL failure in script: User <username> has no permissions to run the '<command>' command script: <script>, on <source>:<line>. |
A script or function called a command, through redis.call or redis.pcall, that the user in the message isn't allowed to run. Allowing EVAL or FCALL doesn't allow the commands inside the script, so add each one to the user's rules with ACL SETUSER. How to fix it |
EVALEVALSHAEVAL_ |
ERR ACL GENPASS argument must be the number of bits for the output password, a positive number up to 4096 |
The number of bits you passed to ACL GENPASS is out of range. Pass a whole number from 1 to 4096, or leave it out to get a 256-bit password. |
ACL GENPASS |
ERR all slot states must be STABLE to start a slot migration task. |
A legacy slot migration is open on this node: some slot is set to MIGRATING or IMPORTING with CLUSTER SETSLOT. Finish that migration, or run CLUSTER SETSLOT with STABLE on the slot, before you start an atomic slot migration. |
CLUSTER MIGRATIONCLUSTER SYNCSLOTS |
ERR An LFU maxmemory policy is not selected, access frequency not tracked. Please note that when switching between policies at runtime LRU and LFU data will take some time to adjust. |
OBJECT FREQ reports how often a key is accessed, which Redis tracks only under a least frequently used (LFU) eviction policy. Set maxmemory-policy to allkeys-lfu or volatile-lfu, or use OBJECT IDLETIME with the current policy. |
OBJECT FREQ |
ERR An LFU maxmemory policy is selected, idle time not tracked. Please note that when switching between policies at runtime LRU and LFU data will take some time to adjust. |
OBJECT IDLETIME reports idle time, which Redis doesn't track while maxmemory-policy is a least frequently used (LFU) policy, allkeys-lfu or volatile-lfu. Use OBJECT FREQ instead, or switch to another policy. |
OBJECT IDLETIME |
ERR Another ASM task is already in progress |
A node asked this node to start sending it slots, but this node is already running another atomic slot migration. Nodes send this to each other, so you see it in logs or in CLUSTER MIGRATION STATUS. Wait for the running migration, or cancel it. |
CLUSTER SYNCSLOTS |
ERR another ASM task is already in progress |
This node is already running an atomic slot migration, and it runs only one at a time. Check it with CLUSTER MIGRATION STATUS ALL, then wait for it to finish or stop it with CLUSTER MIGRATION CANCEL. |
CLUSTER MIGRATION |
ERR Another child process is active (AOF?): can't BGSAVE right now. Use BGSAVE SCHEDULE in order to schedule a BGSAVE whenever possible. |
Another background process, usually a rewrite of the append-only file (AOF), is running, so BGSAVE can't start now. Run BGSAVE SCHEDULE to start the save as soon as possible, or wait and retry. |
BGSAVE |
ERR Another migration task is already in progress |
During an atomic slot migration, the importing node opened its data connection for a task that this node isn't running or isn't ready for. This is internal to the migration. Check CLUSTER MIGRATION STATUS on the importing node, and import again if the task failed. |
CLUSTER SYNCSLOTS |
ERR applied increment would be Infinity |
With SATURATE, INCREX capped the result at a bound so far from the current value that it can't represent the difference, which it returns as the applied increment. Use bounds closer to the current value, or reset the key first. |
INCREX |
ERR applied increment would overflow |
With SATURATE, INCREX capped the result at a bound so far from the current value that the difference, which it returns as the applied increment, doesn't fit in a 64-bit integer. Use bounds closer to the current value, or reset the key first. |
INCREX |
ERR array index overflow |
ARSET would write past the last valid array index, 18446744073709551614, because the start index plus the number of values is too large. Use a smaller start index or fewer values. |
ARSET |
ERR at least 1 input key is needed for '<command>' command |
The number of input keys you passed to the command named in the message is 0 or negative. Pass the number of source keys that follow it, which must be at least 1. | ZDIFFZDIFFSTOREZINTER |
ERR At least one parameter must be specified |
You ran XCFGSET with only a key. Add IDMP-DURATION, IDMP-MAXSIZE or both, each followed by its value. |
XCFGSET |
ERR AUTH <password> called without any password configured for the default user. Are you sure your configuration is correct? |
You sent AUTH with only a password, but the default user has no password, so there's nothing to check. Remove the AUTH call, set a password with requirepass or ACL SETUSER, or also send a username if you meant another user. How to fix it |
AUTH |
ERR Background append only file rewriting already in progress |
An append-only file (AOF) rewrite is already running, so BGREWRITEAOF didn't start another one. Wait for it to finish. INFO persistence shows aof_rewrite_in_progress:1 while it runs. |
BGREWRITEAOF |
ERR Background save already in progress |
A background save is already running, so SAVE or BGSAVE can't start another one. Wait until INFO persistence shows rdb_bgsave_in_progress:0, then retry if you still need a new snapshot. |
SAVEBGSAVE |
ERR Backup directory <dirname> is not empty, CLEANUP it first |
The backup directory in the message already has files in it, for example from an earlier backup that failed or was aborted. BACKUP CLEANUP deletes every file in that directory, so copy anything you need first, then run BACKUP START again. |
BACKUP START |
ERR Backup is in progress |
BACKUP CLEANUP can't run while a backup is still being made. Seal the backup with BACKUP SEAL or cancel it with BACKUP ABORT first. |
BACKUP CLEANUP |
ERR Bad data format |
The RESTORE payload passed the version and checksum checks, but Redis couldn't read the value in it. Common causes are a module data type whose module isn't loaded on this server, or a payload that fails the sanitize-dump-payload check. |
RESTORE |
ERR Bad number of keys provided |
The numkeys argument of FCALL or FCALL_RO, right after the function name, isn't an integer. Pass the number of key names that follow it, such as 0 when the function uses no keys. |
FCALLFCALL_ |
ERR BGSAVE failed, replication can't continue |
The primary couldn't start the background save it needs for a full sync, so it dropped this replica's sync request. You see this in the replica's log; check the primary's log for the reason, often too little memory to fork or a full disk. | CLUSTER SYNCSLOTS |
ERR bit is not an integer or out of range |
The value argument of SETBIT must be 0 or 1, and you passed something else. To write a number wider than one bit, use BITFIELD. |
SETBIT |
ERR bit offset is not an integer or out of range |
The bit offset isn't a whole number of 0 or more, or it points past the largest string Redis allows, set by proto-max-bulk-len. By default, the highest offset is 4294967295. In BITFIELD, an offset that starts with # is multiplied by the field width first. |
BITFIELDBITFIELD_GETBITSETBIT |
ERR BITFIELD_RO only supports the GET subcommand |
BITFIELD_RO is the read-only form of BITFIELD, so it accepts only GET operations. Use BITFIELD to run SET or INCRBY. |
BITFIELD_ |
ERR BITOP <operation> must be called with at least two source keys. |
The DIFF, DIFF1, and ANDOR operations of BITOP compare a first key with one or more others, so they need at least two source keys after the destination key. Add the missing source key. |
BITOP |
ERR BITOP NOT must be called with a single source key. |
BITOP NOT inverts one string, so it takes exactly one source key after the destination key. To invert several keys, run BITOP NOT once for each. |
BITOP |
ERR Blocking module command called from a Reply callback context |
A module tried to block a client from inside the reply callback of an earlier block, which Redis doesn't allow. This is a bug in the module; report it to its developers. | Module commands |
ERR Blocking module command called from Lua script |
A script called a module command that tried to block, which can't happen inside a script. Call that module command directly from your client instead of from EVAL or FCALL. |
Module commands |
ERR Blocking module command called from transaction |
You queued a module command that blocks inside a MULTI transaction, where commands can't block. Run that command outside the transaction. |
Module commands |
ERR BY option of SORT denied due to insufficient ACL permissions. |
You ran SORT with a BY pattern, which reads other keys, but your user's access control list (ACL) rules don't allow reading every key. Give the user read access to all keys, such as %R~* or ~*, or sort without a pattern. |
SORTSORT_ |
ERR BY option of SORT denied in Cluster mode when keys formed by the pattern may be in different slots. |
You ran SORT with a BY pattern in a cluster, and the keys that the pattern builds may be in a different hash slot than the key you sort. Start the pattern with the same hash tag as the key, such as {user1}:w_* for {user1}:list. |
SORTSORT_ |
ERR BYFLOAT increment cannot be Infinity |
You passed INCREX a BYFLOAT increment of infinity, such as inf. Pass a finite number. |
INCREX |
ERR Can not execute a script with write flag using *_ro command. |
You ran a script or function that may write with EVAL_RO, EVALSHA_RO, or FCALL_RO, which only run read-only code. If it never writes, add the no-writes flag; otherwise call it with EVAL, EVALSHA, or FCALL. |
EVALEVALSHAFCALLFCALL_ |
ERR Can not execute the command on a stale replica script: <script>, on <source>:<line>. |
Your script has the allow-stale flag and called a command that this replica can't serve while its link to the primary is down and replica-serve-stale-data is no. Wait for the link to recover, or call only commands that are allowed on a stale replica, such as INFO. |
EVALEVALSHAEVAL_ |
ERR can not read data type |
The payload you passed to FUNCTION RESTORE passed its checksum test, but Redis couldn't read the type of one of its entries, so it's truncated or malformed. Pass the exact, unmodified output of FUNCTION DUMP. |
FUNCTION RESTORE |
ERR Can not run script on cluster, 'no-cluster' flag is set. |
Your script or function has the no-cluster flag, which stops it from running on a cluster node. Remove the flag if the code is safe to run in a cluster, or run it on a server that isn't part of a cluster. |
EVALEVALSHAFCALLFCALL_ |
ERR can only reset normal client connections |
You sent RESET on a connection that's used for replication between a primary and a replica, or from inside a module. RESET only works on normal client connections; to end a replication link, close the connection instead. |
RESET |
ERR Can't assign hashslot <slot> to a different node while I still hold keys for this hash slot. |
CLUSTER SETSLOT with NODE can't give the slot in the message to another node while this node still has keys in that slot. Move the keys first with MIGRATE, then assign the slot. |
CLUSTER SETSLOT |
ERR Can't create backup directory <dirname>: <reason> |
Redis couldn't create the backup directory set by backupdirname, for the operating system reason at the end of the message, such as missing permissions. Check the path and its parent directory. A relative path is resolved under the Redis working directory, dir. |
BACKUP START |
ERR Can't execute '<command>': only (P|S)SUBSCRIBE / (P|S)UNSUBSCRIBE / PING / QUIT / RESET are allowed in this context |
This connection is subscribed to Pub/Sub channels and uses the Redis serialization protocol 2 (RESP2), so it can only run the subscribe and unsubscribe commands, PING, QUIT and RESET. Use a separate connection for other commands, or switch to RESP3 with HELLO 3. |
Any command |
ERR Can't execute an AOF background rewriting. Please check the server logs for more information. |
Redis couldn't start the append-only file (AOF) rewrite, for example because it couldn't create the background process or open a new AOF file. The server log has the reason. Common causes are low memory and disk problems. | BGREWRITEAOF |
ERR Can't forget my master! |
CLUSTER FORGET can't remove the primary of the replica you ran it on. Run it on the other nodes, or first make this replica follow another primary with CLUSTER REPLICATE. |
CLUSTER FORGET |
ERR Can't fsync the INCR file for the backup |
BACKUP SEAL couldn't flush the incremental append-only file (AOF) to disk, so the backup failed. Check the server log and the disk, then run BACKUP CLEANUP and start a new backup. |
BACKUP SEAL |
ERR Can't pin the INCR AOF for the backup |
BACKUP SEAL couldn't create a hard link to the incremental append-only file (AOF) in the backup directory, so the backup failed. Hard links need both directories on the same file system. Check the server log, run BACKUP CLEANUP, and start again. |
BACKUP SEAL |
ERR Can't replicate myself |
You passed this node's own ID to CLUSTER REPLICATE. Pass the ID of the primary it should replicate, as shown by CLUSTER NODES. |
CLUSTER REPLICATE |
ERR Can't resolve instance hostname. |
Sentinel couldn't resolve the host name of the primary that you passed to SENTINEL MONITOR. Check that the name resolves on the Sentinel host, or pass an Internet Protocol (IP) address. Sentinel accepts host names only when resolve-hostnames is yes. |
SENTINEL MONITOR |
ERR Can't rotate the live AOF after sealing the backup |
With appendonly yes, BACKUP SEAL switches the live append-only file (AOF) to a new incremental file, and that step failed, so the backup failed. Check the server log and the disk, then run BACKUP CLEANUP and start a new backup. |
BACKUP SEAL |
ERR Can't start the AOF rewrite for the backup |
BACKUP START couldn't begin the snapshot, because Redis failed to start an append-only file (AOF) rewrite, or to turn on AOF for the backup when appendonly is no. Check the server log, often for a fork or disk error, then try again. |
BACKUP START |
ERR Can't write the backup manifest |
BACKUP SEAL couldn't write the manifest file that describes the backup, so the backup failed. Check the server log and that the backup directory is writable, then run BACKUP CLEANUP and start a new backup. |
BACKUP SEAL |
ERR Cannot authenticate as an internal connection on non-cluster instances |
AUTH with the username internal connection is reserved for cluster nodes talking to each other, and this server isn't running in cluster mode. Authenticate with a normal username and password instead. |
AUTH |
ERR CLIENT CACHING can be called only when the client is in tracking mode with OPTIN or OPTOUT mode enabled |
You sent CLIENT CACHING, but tracking for client-side caching isn't on for this connection. Run CLIENT TRACKING ON OPTIN or CLIENT TRACKING ON OPTOUT first. |
CLIENT CACHING |
ERR CLIENT CACHING NO is only valid when tracking is enabled in OPTOUT mode. |
You sent CLIENT CACHING NO, but tracking isn't in OPTOUT mode. CLIENT CACHING NO only works after CLIENT TRACKING ON OPTOUT; in OPTIN mode, send CLIENT CACHING YES before the reads you want tracked. |
CLIENT CACHING |
ERR CLIENT CACHING YES is only valid when tracking is enabled in OPTIN mode. |
You sent CLIENT CACHING YES, but tracking isn't in OPTIN mode. CLIENT CACHING YES only works after CLIENT TRACKING ON OPTIN; in OPTOUT mode, send CLIENT CACHING NO before the reads you don't want tracked. |
CLIENT CACHING |
ERR Client names cannot contain spaces, newlines or special characters. |
The connection name you passed to CLIENT SETNAME or HELLO SETNAME has a space, a newline, or another character that isn't plain and visible. Use only unaccented letters, digits, and punctuation, such as worker-1. |
CLIENT SETNAMEHELLO |
ERR CLIENT PAUSE mode must be WRITE or ALL |
The mode you passed to CLIENT PAUSE after the timeout isn't WRITE or ALL. Use WRITE to pause only commands that change data, or ALL, the default, to pause every command. |
CLIENT PAUSE |
ERR Client reconfiguration script seems non existing or non executable |
You ran SENTINEL SET with client-reconfig-script, but the path doesn't point to a file that the Sentinel process can execute. Check the path, and make the file executable for the user that runs Sentinel. |
SENTINEL SET |
ERR CLIENT UNBLOCK reason should be TIMEOUT or ERROR |
The reason you passed to CLIENT UNBLOCK after the client ID isn't TIMEOUT or ERROR. Use TIMEOUT, the default, to end the blocked command as if it timed out, or ERROR to make it return an UNBLOCKED error. |
CLIENT UNBLOCK |
ERR client-id should be greater than 0 |
The value after CLIENT KILL ID isn't a positive integer. Pass a client ID from CLIENT LIST or CLIENT ID; IDs start at 1. |
CLIENT KILL |
ERR client-reconfig-script must not contain control characters |
You ran SENTINEL SET with a client-reconfig-script path that contains a control character, such as a newline or a tab. Pass a plain file path. |
SENTINEL SET |
ERR Clients undergoing module based authentication can only be blocked on auth |
A module tried to block a client that's in the middle of module-based authentication, for something other than the authentication itself. This is a bug in the module; report it to its developers. | Module commands |
ERR CLUSTER RESET can't be called with master nodes containing keys |
CLUSTER RESET doesn't run on a primary that still has keys, to avoid losing data. Delete the keys first, for example with FLUSHALL, or reset a replica instead. |
CLUSTER RESET |
ERR CLUSTER SYNCSLOTS CONF ASM-TASK only allowed on replica |
A primary received the ASM-TASK option of CLUSTER SYNCSLOTS CONF, which a primary sends only to its own replicas. This is internal to atomic slot migration and usually means a node changed role during a migration. Check the roles with CLUSTER NODES. |
CLUSTER SYNCSLOTS |
ERR CLUSTER SYNCSLOTS subcommands are only allowed for internal clients |
CLUSTER SYNCSLOTS is used only between cluster nodes during an atomic slot migration, and Redis closes any other connection that sends it. Don't call it yourself. To move slots, use CLUSTER MIGRATION IMPORT. |
CLUSTER SYNCSLOTS |
ERR CLUSTER SYNCSLOTS subcommands are only allowed for master |
A replica accepts CLUSTER SYNCSLOTS only from its own primary, and it closes other connections that send it. Atomic slot migrations run between primaries, so run CLUSTER MIGRATION IMPORT on the primary that should receive the slots. |
CLUSTER SYNCSLOTS |
ERR Command '<command>' not found |
ACL DRYRUN doesn't know the command, shown in the message, that you asked it to test. Check the spelling, and check that the module that provides the command is loaded. |
ACL DRYRUN |
ERR Command is not valid when client is a replica. |
REPLICAOF with a host and port was sent on a connection that is itself a replica's replication link. Making this server a replica disconnects all its replicas, including that link, so send the command from a normal client connection. |
REPLICAOFSLAVEOF |
ERR Command not allowed inside a transaction |
You sent a command inside a MULTI transaction that can't run there, such as SAVE, SHUTDOWN, SYNC or PSYNC. Run it outside the transaction. The transaction is discarded when you call EXEC. |
Commands in a transaction |
ERR CONFIG SET failed (possibly related to argument '<parameter>') |
CONFIG SET couldn't set the parameter in the message, and no reason was given. This usually means a module rejected the value for one of its own settings, so check the module's documentation for valid values. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - <reason> |
CONFIG SET couldn't set the parameter in the message, for the reason after the dash. For dir, the reason comes from the operating system, such as a directory that doesn't exist. For a module setting, it comes from the module. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Active defragmentation cannot be enabled: it requires a Redis server compiled with a modified Jemalloc like the one shipped by default with the Redis source distribution |
This Redis server was built without the jemalloc memory allocator that Redis ships with, so activedefrag can't be turned on. Active defragmentation needs a Redis build that uses its bundled jemalloc. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Announced human node name contained invalid character |
The value for cluster-announce-human-nodename contains a character that isn't allowed, such as a space, a control character, or punctuation like ,, :, =, or @. Use letters, digits, hyphens, dots, and underscores. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - argument couldn't be parsed as an octal number |
The value must be an octal number, such as 700. The only octal setting, unixsocketperm, can't be changed with CONFIG SET, so set it in the configuration file and restart. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - argument couldn't be parsed into an integer |
The setting takes a whole number, and the value you passed isn't one, for example because it has a unit or a decimal point. Pass digits only, with an optional minus sign. | CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - argument must be 'yes' or 'no' |
The setting is either on or off, so its value must be yes or no. Other values, such as true, 1, or on, aren't accepted. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - argument must be a memory or percent value |
maxmemory-clients takes either a memory value, such as 1gb, or a percentage of maxmemory, such as 10%, and the value you passed is neither. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - argument must be a memory value |
The setting takes a memory value: a whole number of bytes, optionally followed by a unit such as kb, mb, or gb, for example 100mb. Check for typos, spaces, decimal points, or a minus sign. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - argument must be between <min> and <max> inclusive |
The value is outside the range that the setting accepts, and the message shows the smallest and the largest allowed values. Pass a value within that range. | CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - argument(s) must be one of the following: <values> |
The setting accepts only the values listed in the message, and yours isn't one of them. Check the spelling. For settings that take several values, separate them with spaces. | CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - array-slice-size must be a power of two |
array-slice-size must be a power of two from 256 to 65536, such as 256, 1024, or 4096. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - array-sparse-kmax must be greater than array-sparse-kmin when non-zero |
array-sparse-kmax must be 0 or greater than the current array-sparse-kmin. Pass a larger value, or lower array-sparse-kmin first. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - array-sparse-kmin must be less than array-sparse-kmax |
array-sparse-kmin must be less than the current array-sparse-kmax, unless that is 0. If you raise both in one CONFIG SET, put array-sparse-kmax first, because each value is checked against the other's current setting. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - can't disable tls-cluster while cluster-bus-port-protected-mode is enabled, as that would leave the cluster bus port unauthenticated; disable cluster-bus-port-protected-mode first, or in the same CONFIG SET command |
In cluster mode, turning off tls-cluster while cluster-bus-port-protected-mode is on would leave the cluster bus without authentication, so Redis refuses. Turn off cluster-bus-port-protected-mode first, or in the same CONFIG SET command. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - can't enable cluster-bus-port-protected-mode while tls-cluster is disabled, as that leaves the cluster bus port unauthenticated; enable tls-cluster first, or in the same CONFIG SET command |
In cluster mode, cluster-bus-port-protected-mode requires tls-cluster, because otherwise the cluster bus has no authentication. Turn on tls-cluster first, or in the same CONFIG SET command. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - can't set immutable config |
The parameter in the message can be set only when the server starts, not with CONFIG SET. Set it in the configuration file or on the command line, then restart the server. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - can't set protected config |
The parameter in the message, such as dir or dbfilename, is protected, and CONFIG SET can't change it while enable-protected-configs is no, the default. Set it in the configuration file, or start the server with enable-protected-configs set to yes or local. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - dbfilename can't be a path, just a filename |
dbfilename takes only a file name, such as dump.rdb, without a directory. Set the directory with dir instead. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - duplicate parameter |
The same parameter appears twice in one CONFIG SET, possibly once by its alias, such as replica-read-only and slave-read-only. Pass each parameter only once. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Error in hard, soft or soft_seconds setting in buffer limit configuration. |
In client-output-buffer-limit, each class needs a hard limit and a soft limit, as memory values such as 256mb or 0, and soft seconds, as a whole number of 0 or more. One of these three values isn't valid. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Failed to bind to specified addresses. |
Redis couldn't listen on an address you set in bind, for example because the address doesn't belong to this machine or the port is already in use. The server log has the address and the reason. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Failed to set current oom_score_adj. Check server logs. |
Redis couldn't change its Linux out-of-memory killer score, which oom-score-adj and oom-score-adj-values control. This works only on Linux, and lowering the score needs extra privileges. The server log has the reason. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - failed to set process title |
Redis accepted the new proc-title-template but couldn't apply it to the process title. The template is checked before this step, so this normally doesn't happen. Check the template and the server log. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Hostnames for cluster-announce-ip must be less than 46 characters |
A hostname in cluster-announce-ip must be shorter than 46 characters. Use a shorter name or a numeric address, or announce the hostname with cluster-announce-hostname instead. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Hostnames may only contain alphanumeric characters, hyphens or dots |
The value for cluster-announce-hostname or cluster-announce-ip contains a character other than letters, digits, hyphens, or dots, such as an underscore or a space. Remove those characters. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Hostnames must be less than 256 characters |
The value for cluster-announce-hostname must be shorter than 256 characters. Use a shorter hostname. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Invalid client class specified in buffer limit configuration. |
client-output-buffer-limit names a client class that it doesn't support. Use normal, replica, or pubsub. The master class isn't allowed. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Invalid event class character. Use 'Ag$lshzxeKEtmdnocaSTIV'. |
The value of notify-keyspace-events contains a character that isn't an event class. Use only the characters listed in the message, for example KEA to get every event, or an empty string to turn notifications off. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Invalid latency-tracking-info-percentiles parameters |
A value in latency-tracking-info-percentiles isn't a number. Pass numbers separated by spaces, such as 50 99 99.9. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Invalid locale name |
The locale in locale-collate isn't installed on the server's operating system. Use a locale that locale -a lists on that machine, or an empty string to use the default from the environment. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Invalid oom-score-adj-values, elements must be between -2000 and 2000. |
oom-score-adj-values takes three whole numbers, for the primary, replicas, and background child processes, each from -2000 to 2000. One of the values isn't a number or is out of range. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Invalid save parameters |
The value of save must be pairs of numbers: seconds, 1 or more, then a number of changes, 0 or more, such as 3600 1 300 100. To turn off snapshots, pass an empty string. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - latency-tracking-info-percentiles parameters should sit between [0.0,100.0] |
Each value in latency-tracking-info-percentiles must be from 0.0 to 100.0. Fix or remove the value that's out of range. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - memory tracking cannot be enabled at runtime |
Setting key-memory-histograms to yes, or adding mem to cluster-slot-stats-enabled, needs memory tracking, which Redis can turn on only at startup. Set the option in the configuration file and restart the server. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - percentage argument must be less or equal to <max> |
A percentage for maxmemory-clients can't be higher than the number in the message, 100. Pass a lower percentage, or a memory value. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - shutdown options SAVE and NOSAVE can't be used simultaneously |
shutdown-on-sigint and shutdown-on-sigterm can't include both save and nosave. Pick one of them, optionally with now or force. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - template format is invalid or contains unknown variables |
The value for proc-title-template uses a variable that doesn't exist, has unbalanced braces, or gives an empty title. The variables are {title}, {listen-addr}, {server-mode}, {port}, {tls-port}, {unixsocket}, and {config-file}. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - The event loop API used by Redis is not able to handle the specified number of clients |
Redis couldn't make its event loop large enough for the new maxclients. This usually happens only on systems where Redis uses the older select interface, which handles about 1024 connections. Use a lower value. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - The operating system is not able to handle the specified number of clients, try with <maxclients> |
The operating system's open-files limit is too low for the maxclients you asked for. Redis needs one file descriptor per client, plus 32. Raise the limit for the Redis process, for example with ulimit -n, and restart, or use the value in the message. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - TLS support is not compiled in, cannot enable TLS options. |
This Redis server was built without Transport Layer Security (TLS) support, so you can't turn on tls-replication or tls-cluster. Use a Redis build with TLS support. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - TLS support is not compiled in, cannot set a TLS port. |
This Redis server was built without Transport Layer Security (TLS) support, so you can't set tls-port. Use a Redis build with TLS support, or keep tls-port at 0. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - tls-expected-peer-name contains no usable name; use an empty string to disable it |
tls-expected-peer-name contains only spaces, so there's no name to check. Pass one or more names separated by spaces, or an empty string to turn the check off. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - tls-expected-peer-name must not contain whitespace other than spaces separating names; use an empty string to disable it |
tls-expected-peer-name contains a tab, a newline, or other whitespace that isn't a plain space. Separate names with spaces only, or pass an empty string to turn the check off. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Too many bind addresses specified. |
bind accepts at most 16 addresses, and you passed more. Remove some of the addresses. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Unable to listen on this port. Check server logs. |
Redis couldn't listen on the new port or tls-port, usually because another process uses it, or because a port below 1024 needs extra privileges. The server log has the exact reason. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Unable to turn on AOF. Check server logs. |
Redis couldn't turn on the append-only file (AOF) after CONFIG SET appendonly yes, for example because it couldn't start the rewrite that writes the first AOF file. The server log has the reason. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Unable to update TLS configuration. Check server logs. |
Redis couldn't load the new Transport Layer Security (TLS) settings, for example because a certificate or key file is missing, unreadable, or doesn't match. Check the tls-* file settings. The server log has the exact error. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - wrong number of arguments |
oom-score-adj-values takes exactly three values, for the primary, replicas, and background child processes, such as 0 200 800. Pass all three, separated by spaces. |
CONFIG SET |
ERR CONFIG SET failed (possibly related to argument '<parameter>') - Wrong number of arguments in buffer limit configuration. |
client-output-buffer-limit takes groups of four values: class, hard limit, soft limit, and soft seconds, such as normal 0 0 0. The value you passed doesn't split into groups of four. |
CONFIG SET |
ERR Copying to another database is not allowed in cluster mode |
In cluster mode there's only database 0, so COPY can't use the DB option to copy to another database. Copy within database 0 instead. |
COPY |
ERR could not decode requested zset member |
The member you passed to GEORADIUSBYMEMBER or to FROMMEMBER doesn't exist in the sorted set, or its score isn't a valid geohash. Add the member with GEOADD first, or search from coordinates with FROMLONLAT. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR COUNT can't be negative |
You passed LPOS a COUNT that's negative or not an integer. Pass the number of matches to return, or 0 to return all of them. |
LPOS |
ERR COUNT must be > 0 |
The COUNT value is 0 or negative; for XAUTOCLAIM, it can also be a non-integer or a huge number. Pass a positive count, or leave COUNT out: geospatial searches then return every match, and XAUTOCLAIM claims up to 100 entries. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR COUNT must be between 1 and 64 |
The COUNT value in HOTKEYS START, the number of top keys to track, isn't an integer from 1 to 64. Pass a value in that range, or leave COUNT out to track the top 10. |
HOTKEYS START |
ERR count should be greater than 0 |
The COUNT you passed, or the count after EXACTLY in LMOVEM and BLMOVEM, is 0, negative, or not an integer. Pass the number of elements to pop or move, which must be at least 1. |
BLMPOPLMPOPBLMOVEM |
ERR count should be greater than or equal to -1 |
You ran SLOWLOG GET with a count that isn't an integer or is less than -1. Pass the number of entries you want, or -1 to get all of them. |
SLOWLOG GET |
ERR DB index is out of range |
The database number you passed to SELECT, MOVE, COPY, or SWAPDB doesn't exist. Databases are numbered from 0 to the databases setting minus one, so 0 to 15 by default. |
SELECTMOVECOPYSWAPDB |
ERR DB must be empty to perform CLUSTER FLUSHSLOTS. |
CLUSTER FLUSHSLOTS removes all slots from this node, and it runs only when the node has no keys. Delete the keys first, for example with FLUSHALL. |
CLUSTER FLUSHSLOTS |
ERR DEBUG command not allowed. If the enable-debug-command option is set to "local", you can run it from a local connection, otherwise you need to set this option in the configuration file, and then restart the server. |
DEBUG is turned off on this server, which is the default. To use it, set enable-debug-command to yes, or to local to allow it only from local connections, in the configuration file and restart Redis; CONFIG SET can't change it. |
DEBUG |
ERR decrement would overflow |
You passed DECRBY -9223372036854775808, the smallest 64-bit integer, which Redis can't turn into a positive amount to subtract. Use a smaller amount, or INCRBY with a negative amount. |
DECRBY |
ERR Destination node <node_id> is not a master |
The node asking to receive the slots, named by its ID in the message, is unknown to this node or isn't a primary. Only a primary can import slots. Check the roles with CLUSTER NODES, and start the import on a primary. |
CLUSTER SYNCSLOTS |
ERR DISCARD without MULTI |
You sent DISCARD, but this connection has no open transaction. A transaction ends with EXEC or DISCARD, so check that MULTI and DISCARD go over the same connection and that the transaction hasn't ended already. |
DISCARD |
ERR DUMP payload version or checksum are wrong |
The payload you passed to RESTORE or FUNCTION RESTORE was made by a newer Redis version, or it changed on the way, for example truncated or converted to text by your client. Pass the exact bytes that DUMP or FUNCTION DUMP returned. |
RESTOREFUNCTION RESTORE |
ERR Duplicate argument '<option>' to SENTINEL CONFIG SET |
You named the same option more than once in one SENTINEL CONFIG SET command. List each option once, with one value. |
SENTINEL CONFIG |
ERR duplicate field name in fieldset |
You ran HIMPORT PREPARE with the same field name more than once. List each field once; names are compared exactly, so case matters. |
HIMPORT PREPARE |
ERR Duplicate master name. |
You ran SENTINEL MONITOR with a primary name that this Sentinel already monitors. Choose another name, or remove the existing one first with SENTINEL REMOVE. |
SENTINEL MONITOR |
ERR duplicate slot number |
The slot numbers after SLOTS in HOTKEYS START include the same slot twice. List each slot once, and lower the count to match. |
HOTKEYS START |
ERR DURATION must be between 1 and 1000000 |
The DURATION value in HOTKEYS START isn't an integer from 1 to 1000000 seconds. 0 isn't accepted; to track until you run HOTKEYS STOP, leave DURATION out. |
HOTKEYS START |
ERR Elements are too large to be stored |
The fields and values of the entry you passed to XADD add up to more than 1 GiB (1,073,741,824 bytes), the most that one stream entry can hold. Store large values in separate keys, and put only the key names in the stream. |
XADD |
ERR Engine '<engine>' not found |
The shebang line of your library names an engine that doesn't exist, the word right after #!. Lua is the only engine, so start the library with a line such as #!lua name=mylib. |
FUNCTION LOADFUNCTION RESTORE |
ERR entries_added must be positive |
You passed XSETID a negative ENTRIESADDED. Pass 0 or more, and no less than the stream's length. |
XSETID |
ERR ENX flag requires an expiration |
You passed ENX to INCREX without an expiration. Add one of EX, PX, EXAT or PXAT; with ENX, Redis sets it only if the key has no expiration yet. |
INCREX |
ERR |
SAVE couldn't write the snapshot file to disk, or BGSAVE couldn't start the background process that writes it. Check the Redis log for the reason, which is often a full disk, no write permission on the dir directory, or too little memory to fork the process. |
SAVEBGSAVE |
ERR Error compiling function: <reason> |
Lua couldn't compile the library code you passed to FUNCTION LOAD or FUNCTION RESTORE. The reason after the colon gives the line number in your code and the syntax problem; fix it and load the library again. |
FUNCTION LOADFUNCTION RESTORE |
ERR Error compiling script (new function): <reason> |
Lua couldn't compile the script you sent with EVAL or SCRIPT LOAD. The reason after the colon gives the line number in your script and the syntax problem, such as a missing end or an unclosed string; fix it and send the script again. |
EVALEVALSHASCRIPT LOAD |
ERR Error in ACL SETUSER modifier '<modifier>': Adding a pattern after the * pattern (or the 'allchannels' flag) is not valid and does not have any effect. Try 'resetchannels' to start with an empty list of channels |
You added a channel pattern with & to a user that can already use all channels, through allchannels or &*, so the pattern would have no effect. Put resetchannels before the patterns to limit the user to those channels. |
ACL SETUSER |
ERR Error in ACL SETUSER modifier '<modifier>': Adding a pattern after the * pattern (or the 'allkeys' flag) is not valid and does not have any effect. Try 'resetkeys' to start with an empty list of patterns |
You added a key pattern with ~ or % to a user that can already use all keys, through allkeys or ~*, so the pattern would have no effect. Put resetkeys before the patterns to limit the user to those keys. |
ACL SETUSER |
ERR Error in ACL SETUSER modifier '<modifier>': Allowing first-arg of a subcommand is not supported |
You tried to allow a subcommand with one specific first argument, such as +config|get|maxmemory. Access control list (ACL) rules can allow a command or a subcommand, such as +config|get, but not a single argument of a subcommand. |
ACL SETUSER |
ERR Error in ACL SETUSER modifier '<modifier>': Syntax error |
Redis didn't recognize the rule shown in the message. Common causes are a misspelled keyword, a % key rule with flags other than R and W, a subcommand rule that ends with |, or a key or channel pattern that contains spaces. |
ACL SETUSER |
ERR Error in ACL SETUSER modifier '<modifier>': The password hash must be exactly 64 characters and contain only lowercase hexadecimal characters |
A rule that starts with # or ! must be followed by a hashed password: exactly 64 lowercase hexadecimal characters, the form that ACL GETUSER shows. To pass the password in plain text, use > or < instead. |
ACL SETUSER |
ERR Error in ACL SETUSER modifier '<modifier>': The password you are trying to remove from the user does not exist |
A < or ! rule tried to remove a password that the user doesn't have. Check the password or hash you passed, or use resetpass to remove all of the user's passwords. |
ACL SETUSER |
ERR Error in ACL SETUSER modifier '<modifier>': Unknown command or category name in ACL |
A + or - rule names a command, or a +@ or -@ rule names a category, that this server doesn't know. Check the name with COMMAND LIST or ACL CAT, and check that the module that provides the command is loaded. |
ACL SETUSER |
ERR Error in ACL SETUSER modifier '<modifier>': Wrong format |
Redis rejected the rule shown in the message without giving a specific reason. This is a fallback that the rules in Redis 8.10 don't normally produce, so compare the rule with the ACL SETUSER syntax and look for unusual characters. |
ACL SETUSER |
ERR Error loading ACLs, opening file '<filename>': <reason> |
ACL LOAD couldn't open the access control list (ACL) file set by aclfile, for the operating system reason at the end of the message, such as a missing file or no read permission. Check the path and the file's permissions. |
ACL LOAD |
ERR Error loading the extension. Please check the server logs. |
MODULE LOAD or MODULE LOADEX couldn't load the module, and the Redis log says why. Common causes are a wrong path, a file without execute permission, a module built for another platform, a module that's already loaded, or invalid module arguments. |
MODULE LOADMODULE LOADEX |
ERR Error purging dirty pages |
MEMORY PURGE asked the jemalloc memory allocator to return unused memory to the operating system, and the allocator reported an error. This is usually temporary and doesn't affect your data, so you can retry later and check the Redis log. |
MEMORY PURGE |
ERR Error registering functions: ERR callback argument given to redis.register_function must be a function |
In the table form of redis.register_function, the callback field isn't a Lua function. Set it to the function itself, not to its name as a string or to the result of calling it. |
FUNCTION LOAD |
ERR Error registering functions: ERR calling redis.register_function with a single argument is only applicable to Lua table (representing named arguments). |
You called redis.register_function with one argument that isn't a table. Pass either two arguments, the function name and the callback, or one table with function_name and callback fields. |
FUNCTION LOAD |
ERR Error registering functions: ERR description argument given to redis.register_function must be a string |
In the table form of redis.register_function, the description field isn't a string. Set it to a short text that describes the function, or leave it out. |
FUNCTION LOAD |
ERR Error registering functions: ERR first argument to redis.register_function must be a string |
You called redis.register_function with two arguments, but the first one isn't a string. Pass the function name first and the callback second, as in redis.register_function('my_func', my_callback). |
FUNCTION LOAD |
ERR Error registering functions: ERR flags argument to redis.register_function must be a table representing function flags |
In the table form of redis.register_function, the flags field isn't a table. Pass the flags as a Lua table of strings, such as flags = { 'no-writes' }, even when there's only one. |
FUNCTION LOAD |
ERR Error registering functions: ERR Function already exists in the library |
Your library code calls redis.register_function twice with the same function name. Give each function in the library a unique name. |
FUNCTION LOAD |
ERR Error registering functions: ERR FUNCTION LOAD timeout |
Your library's top-level code ran for more than 500 milliseconds during FUNCTION LOAD, so Redis stopped it. That code should only register functions; move any long-running work into the function callbacks, and check for an endless loop. |
FUNCTION LOAD |
ERR Error registering functions: ERR function_name argument given to redis.register_function must be a string |
In the table form of redis.register_function, the function_name field isn't a string. Set it to the name that you'll pass to FCALL. |
FUNCTION LOAD |
ERR Error registering functions: ERR Library names can only contain letters, numbers, or underscores(_) and must be at least one character long |
A function name passed to redis.register_function is empty or has characters other than letters, digits, and underscores, even though the message says library names. Rename the function using only those characters, such as my_func. |
FUNCTION LOAD |
ERR Error registering functions: ERR named argument key given to redis.register_function is not a string |
The table you passed to redis.register_function has a key that isn't a string, such as true or a table. Use only the named fields function_name, callback, flags, and description. |
FUNCTION LOAD |
ERR Error registering functions: ERR redis.register_function must get a callback argument |
The table you passed to redis.register_function has no callback field. Add callback and set it to the Lua function that FCALL should run. |
FUNCTION LOAD |
ERR Error registering functions: ERR redis.register_function must get a function name argument |
The table you passed to redis.register_function has no function_name field. Add function_name and set it to the name that you'll pass to FCALL. |
FUNCTION LOAD |
ERR Error registering functions: ERR second argument to redis.register_function must be a function |
You called redis.register_function with two arguments, but the second one isn't a function. Pass the function itself, not its name as a string or the result of calling it. |
FUNCTION LOAD |
ERR Error registering functions: ERR unknown argument given to redis.register_function |
The table you passed to redis.register_function has a field other than function_name, callback, flags, and description, or an entry without a name. Check the field names for typos. |
FUNCTION LOAD |
ERR Error registering functions: ERR unknown flag given |
The flags table you passed to redis.register_function has an entry that isn't a known flag name. Valid flags are no-writes, allow-oom, allow-stale, no-cluster, and allow-cross-slot-keys. |
FUNCTION LOAD |
ERR Error registering functions: ERR user_function:<line>: Script attempted to access nonexistent global variable '<name>' |
While FUNCTION LOAD ran your library's top-level code, it read a global that doesn't exist at load time, named in the message. Only redis.register_function, redis.log, and the version fields exist then, so move other calls into the function callbacks and use local for your variables. |
FUNCTION LOAD |
ERR Error registering functions: ERR wrong number of arguments to redis.register_function |
You called redis.register_function with no arguments or more than two. Pass either the function name and the callback, or a single table of named arguments. |
FUNCTION LOAD |
ERR Error running script <script>, <error> |
A script or function failed in a way that Redis couldn't report as usual, which can happen when Lua runs out of memory or its error handling fails. The end of the message shows the Lua error; check the script for runaway memory use. | EVALEVALSHAEVAL_ |
ERR error saving the cluster node config: <reason> |
CLUSTER SAVECONFIG couldn't write the cluster configuration file, set by cluster-config-file, for the operating system reason at the end of the message. Check that the file and its directory are writable and that the disk isn't full. |
CLUSTER SAVECONFIG |
ERR Error unloading module: no such module with that name |
No loaded module has the name you passed to MODULE UNLOAD, which takes the module's name, not its file path. Run MODULE LIST to see the names, such as search or ReJSON. |
MODULE UNLOAD |
ERR Error unloading module: operation not possible. |
The module refused to be unloaded: its unload callback returned an error, and the Redis log says that the unload was canceled. Check the module's documentation for what it needs before it can be unloaded. | MODULE UNLOAD |
ERR Error unloading module: the module can't be unloaded |
The module is built into the Redis server instead of loaded from a file, so it can't be unloaded. In Redis 8, this applies to the vector sets module, vectorset. |
MODULE UNLOAD |
ERR Error unloading module: the module exports APIs used by other modules. Please unload them first and try again |
Other loaded modules depend on functions that this module exports to them. Unload those modules first, then unload this one. | MODULE UNLOAD |
ERR Error unloading module: the module exports one or more module-side data types, can't unload |
The module defines its own data types, so Redis can't unload it while it runs, because keys of those types may exist. This applies to Search, JSON, probabilistic, and time series; to remove one, take it out of the server's loadmodule configuration and restart Redis. |
MODULE UNLOAD |
ERR Error unloading module: the module has blocked clients. Please wait for them to be unblocked and try again |
Some clients are still blocked on commands of this module, so Redis can't unload it yet. Wait for those commands to finish or time out, then try again. | MODULE UNLOAD |
ERR Error unloading module: the module holds timer that is not fired. Please stop the timer or wait until it fires. |
The module has a timer that hasn't fired yet, so Redis can't unload it. Wait for the timer to fire, or stop it with the module's own commands if it has any, then try again. | MODULE UNLOAD |
ERR Errors trying to SHUTDOWN. Check logs. |
Your SHUTDOWN was waiting for replicas to catch up, but the shutdown was canceled. Either it failed, for example because the final save failed, or another client ran SHUTDOWN ABORT. The server is still running, and its log has the reason. |
SHUTDOWN |
ERR exactly one of BYRADIUS and BYBOX can be specified for <command> |
You called GEOSEARCH or GEOSEARCHSTORE without a search shape. Add either BYRADIUS with a radius and unit, or BYBOX with a width, height, and unit; passing both is a syntax error. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR exactly one of FROMMEMBER or FROMLONLAT can be specified for <command> |
You called GEOSEARCH or GEOSEARCHSTORE without a center point. Add either FROMMEMBER with a member of the set, or FROMLONLAT with a longitude and latitude; passing both is a syntax error. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR EXEC without MULTI |
You sent EXEC, but this connection has no open transaction. This often happens when a connection pool sends MULTI and EXEC on different connections, or after the transaction has already ended; send MULTI, the commands, and EXEC on one connection. |
EXEC |
ERR Failed creating the library |
Redis couldn't create a library from the FUNCTION RESTORE payload. Load the library from its source code with FUNCTION LOAD, which reports the exact problem. |
FUNCTION RESTORE |
ERR Failed loading library payload |
Redis couldn't read a library's code from the FUNCTION RESTORE payload, so the payload is truncated or malformed. Pass the exact, unmodified output of FUNCTION DUMP. |
FUNCTION RESTORE |
ERR failed loading the given functions payload |
Redis couldn't load the libraries in the payload you passed to FUNCTION RESTORE. Pass the exact, unmodified output of FUNCTION DUMP, or load the libraries from their source code with FUNCTION LOAD. |
FUNCTION RESTORE |
ERR Failed to create idempotency hash |
XADD with IDMPAUTO couldn't compute the idempotent ID from the entry's fields and values, which can happen when the server can't allocate memory for it. Retry the command, and check the server's memory if it keeps happening. |
XADD |
ERR Failed to handle master task: <task> |
A replica couldn't apply the details of an atomic slot migration that its primary sent. This is internal to the migration. Check the replica's log, and check that the replica is in sync with its primary. | CLUSTER SYNCSLOTS |
ERR Failed to save config file. Check server logs. |
Sentinel made your change but couldn't rewrite its configuration file, so the change is lost when Sentinel restarts. Check the Sentinel log for the reason, which is often a configuration file or directory that the Sentinel user can't write to. | SENTINEL FLUSHCONFIGSENTINEL MONITORSENTINEL REMOVE |
ERR FAILOVER already in progress. |
A failover started by an earlier FAILOVER is still running. Wait for it to finish, or cancel it with FAILOVER ABORT before you start a new one. |
FAILOVER |
ERR FAILOVER is not valid when server is a replica. |
You sent FAILOVER to a replica, but it only works on a primary, which hands its role to one of its replicas. Send it to the current primary instead. |
FAILOVER |
ERR FAILOVER not allowed in cluster mode. Use CLUSTER FAILOVER command instead. |
FAILOVER works only outside cluster mode. In a cluster, send CLUSTER FAILOVER to the replica that should become the primary. |
FAILOVER |
ERR FAILOVER requires connected replicas. |
You sent FAILOVER to a primary that has no connected replicas, so there's nothing to promote. Connect at least one replica, and check INFO replication before you retry. |
FAILOVER |
ERR FAILOVER target HOST and PORT is not a replica. |
The host and port after TO don't match any replica connected to this primary. Use the address and port that INFO replication lists for the replica. |
FAILOVER |
ERR FAILOVER target replica is not online. |
The replica you named with TO is connected but hasn't finished its initial sync, so it can't take over yet. Wait until INFO replication shows it as online, then retry. |
FAILOVER |
ERR FAILOVER timeout must be greater than 0 |
The value after TIMEOUT in FAILOVER is 0 or negative. Pass a positive number of milliseconds, or leave TIMEOUT out to wait with no time limit. |
FAILOVER |
ERR FAILOVER with force option requires both a timeout and target HOST and IP. |
You passed FORCE to FAILOVER without both TIMEOUT and TO followed by a host and port. Add TO with the replica's host and port, and TIMEOUT in milliseconds, so Redis knows which replica to force and when. |
FAILOVER |
ERR FIELDS keyword specified multiple times |
You used the FIELDS keyword more than once in the same command. Put all the fields in one FIELDS block, with the number of fields first. |
HGETEXHSETEXHEXPIRE |
ERR FIELDS requires at least numfields and one field argument |
FIELDS is too close to the end of the command to be followed by a field count and at least one field. Put FIELDS, the number of fields, and the field names last, for example HEXPIRE key 60 NX FIELDS 1 field. |
HEXPIREHEXPIREATHPEXPIREHPEXPIREAT |
ERR First argument must be a number (log level). script: <script>, on <source>:<line>. |
Your script called redis.log() with a first argument that isn't a number. Pass the log level first and then the message, for example redis.log(redis.LOG_WARNING, 'text'). |
EVALEVALSHAEVAL_ |
ERR Fork() failed: can't run EVAL in debugging mode: <reason> |
You ran EVAL after SCRIPT DEBUG YES, which debugs in a forked copy of the server, and the fork failed for the reason shown, usually low memory. Free memory, or use SCRIPT DEBUG SYNC, which doesn't fork but blocks the server while you debug. |
EVAL |
ERR Function <function> already exists |
A function in the library you're loading has the same name as a function in another loaded library, and function names must be unique across all libraries. Rename the function, or remove the other library with FUNCTION DELETE; with FUNCTION RESTORE, the FLUSH policy replaces all libraries. |
FUNCTION LOADFUNCTION RESTORE |
ERR Function code is missing |
You ran FUNCTION LOAD without the library code. Pass the code as the last argument, after the optional REPLACE. |
FUNCTION LOAD |
ERR FUNCTION FLUSH only supports SYNC|ASYNC option |
You passed FUNCTION FLUSH an argument other than SYNC or ASYNC. Run FUNCTION FLUSH SYNC or FUNCTION FLUSH ASYNC, or no option at all to let the lazyfree-lazy-user-flush setting choose. |
FUNCTION FLUSH |
ERR Function not found |
No loaded library has a function with the name you passed to FCALL or FCALL_RO. Check the loaded functions with FUNCTION LIST, and load the library with FUNCTION LOAD if it's missing, for example on a new server or after FUNCTION FLUSH. |
FCALLFCALL_ |
ERR GEOSEARCHSTORE is not compatible with WITHDIST, WITHHASH and WITHCOORD options |
You passed WITHDIST, WITHHASH, or WITHCOORD to GEOSEARCHSTORE, which stores its results instead of returning them. Remove those options; to store distances, use STOREDIST, or run GEOSEARCH to get the details back. |
GEOSEARCHSTORE |
ERR GET option of SORT denied due to insufficient ACL permissions. |
You ran SORT with GET, which needs read access to every key, even for GET #, but your user's access control list (ACL) rules don't allow that. Give the user read access to all keys, such as %R~* or ~*, or leave out GET. |
SORTSORT_ |
ERR GET option of SORT denied in Cluster mode when keys formed by the pattern may be in different slots. |
You ran SORT with a GET pattern in a cluster, and the keys it builds may be in another hash slot than the sorted key. Start the pattern with the key's hash tag, or read the values separately. GET # is always allowed. |
SORTSORT_ |
ERR given type is not a function |
The payload you passed to FUNCTION RESTORE isn't a functions payload, usually because it's the output of DUMP for a key. Make the payload with FUNCTION DUMP, or restore a key's payload with RESTORE. |
FUNCTION RESTORE |
ERR GT and LT options at the same time are not compatible |
You passed both GT and LT to EXPIRE, PEXPIRE, EXPIREAT, or PEXPIREAT, but a new expiry can't be both greater and less than the current one. Keep only one of them. |
EXPIREEXPIREATPEXPIREPEXPIREAT |
ERR GT, LT, and/or NX options at the same time are not compatible |
You passed ZADD more than one of GT, LT and NX, which conflict with each other. Use at most one of them; XX can be combined with GT or LT. |
ZADDZINCRBY |
ERR hash value is not a float |
HINCRBYFLOAT can't add to the field, because its current value isn't a number. Set the field to a numeric value first, or increment a different field. |
HINCRBYFLOAT |
ERR hash value is not an integer |
HINCRBY can't add to the field, because its current value isn't an integer, for example 1.5 or text. Use HINCRBYFLOAT for decimal values, or set the field to an integer first. |
HINCRBY |
ERR height or width cannot be negative |
The width or height after BYBOX in GEOSEARCH or GEOSEARCHSTORE is negative. Pass sizes of 0 or more, followed by the unit. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR hotkey tracking session already in progress |
A hotkey tracking session is already running, and only one can run at a time. Run HOTKEYS STOP first, then start the new session. |
HOTKEYS START |
ERR hotkey tracking session in progress, stop tracking first |
You ran HOTKEYS RESET while a tracking session is still running. Run HOTKEYS STOP first, then HOTKEYS RESET to free the results. |
HOTKEYS RESET |
ERR HOTKEYS subcommand required |
You ran HOTKEYS without a subcommand. Add one of START, STOP, GET, RESET, or HELP. |
HOTKEYS GETHOTKEYS HELPHOTKEYS RESETHOTKEYS STARTHOTKEYS STOP |
ERR I can only replicate a master, not a replica. |
CLUSTER REPLICATE takes the ID of a primary, and you passed the ID of a replica. Use the ID of that replica's primary, as shown by CLUSTER NODES. |
CLUSTER REPLICATE |
ERR I don't know about node <node_id> |
CLUSTER SETSLOT with MIGRATING or IMPORTING names a node ID that this node doesn't know. Check the ID with CLUSTER NODES on this node. |
CLUSTER SETSLOT |
ERR I tried hard but I can't forget myself... |
You passed this node's own ID to CLUSTER FORGET. To remove this node from the cluster, run the command on each of the other nodes. |
CLUSTER FORGET |
ERR I'm a replica but my master is unknown to me |
This replica doesn't know which node is its primary, so it can't fail over. Check its role with CLUSTER NODES, and set its primary with CLUSTER REPLICATE if needed. |
CLUSTER FAILOVER |
ERR I'm already the owner of hash slot <slot> |
CLUSTER SETSLOT with IMPORTING was sent to the node that already serves the slot. Send it to the node that should receive the slot. |
CLUSTER SETSLOT |
ERR I'm not the owner of hash slot <slot> |
CLUSTER SETSLOT with MIGRATING must go to the node that serves the slot, and this node doesn't. Send it to the slot's current owner, shown by CLUSTER SHARDS or CLUSTER NODES. |
CLUSTER SETSLOT |
ERR idempotent ID must be non-empty |
XIDMPRECORD, an internal command, got an empty idempotent ID, the argument after the producer ID. Pass a non-empty string. |
XIDMPRECORD |
ERR IDMP-DURATION must be between 1 and 86400 seconds |
You passed XCFGSET an IDMP-DURATION outside the range of 1 to 86400 seconds (one day). Pass how long the stream remembers each idempotent ID, within that range. |
XCFGSET |
ERR IDMP-DURATION specified multiple times |
You passed IDMP-DURATION more than once in one XCFGSET command. Pass it once. |
XCFGSET |
ERR IDMP-MAXSIZE must be between 1 and 10000 entries |
You passed XCFGSET an IDMP-MAXSIZE outside the range of 1 to 10000. Pass how many idempotent IDs the stream keeps for each producer, within that range. |
XCFGSET |
ERR IDMP-MAXSIZE specified multiple times |
You passed IDMP-MAXSIZE more than once in one XCFGSET command. Pass it once. |
XCFGSET |
ERR IDS option is required |
You ran XACKDEL or XDELEX without the IDS block. Add IDS, the number of entry IDs, and the IDs themselves. |
XACKDELXDELEX |
ERR If you want both the length and indexes, please just use IDX. |
You passed both LEN and IDX to LCS. Use only IDX, whose reply already includes the length. |
LCS |
ERR IID already exists for this producer with a different stream ID |
XIDMPRECORD, an internal command, tried to link an idempotent ID to an entry, but that producer already uses the ID for a different entry. One idempotent ID can point to only one entry for each producer; use a different ID. |
XIDMPRECORD |
ERR INCR option supports a single increment-element pair |
You passed ZADD the INCR option with more than one score and member pair. With INCR, pass exactly one increment and one member, or use ZINCRBY. |
ZADDZINCRBY |
ERR Increment is not a valid float |
The value after BYFLOAT in INCREX isn't a number. Pass a decimal number, such as 1.5. |
INCREX |
ERR Increment is not an integer or out of range |
The value after BYINT in INCREX isn't an integer between -9223372036854775808 and 9223372036854775807. Pass a whole number, or use BYFLOAT for decimal increments. |
INCREX |
ERR increment or decrement would overflow |
The result would be outside the range of a signed 64-bit integer, -9223372036854775808 to 9223372036854775807. Use a smaller increment, or reset the value first. How to fix it | HINCRBYDECRDECRBYINCRINCRBY |
ERR increment would produce NaN or Infinity |
The result of INCRBYFLOAT or HINCRBYFLOAT would be infinite or not a number (NaN), for example because the increment is inf or the values are extremely large. Use finite values within the normal range. |
HINCRBYFLOATINCRBYFLOAT |
ERR index out of range |
LSET got an index beyond the ends of the list. Use an index from 0 to the length minus 1, or a negative index from -1 down to minus the length; LLEN returns the length. |
LSET |
ERR insert index overflow |
ARINSERT would write past the last valid array index, 18446744073709551614, because its insert position, which ARSEEK and earlier inserts move forward, is too close to it. Move the insert position back with ARSEEK, or use a new key. |
ARINSERT |
ERR Insufficient memory, failed allocating transient memory for LCS |
LCS couldn't allocate the working table it needs, which takes about 4 bytes times the product of the two string lengths. Compare shorter strings, or free memory on the server. |
LCS |
ERR Insufficient memory, failed allocating transient memory, COUNT too high. |
The COUNT you passed to XAUTOCLAIM is so large that Redis couldn't allocate the memory it reserves for it in advance. Use a smaller count, such as the default of 100, and call XAUTOCLAIM again with the cursor it returns. |
XAUTOCLAIM |
ERR Insufficient memory, failed allocating transient memory, too many args. |
Redis couldn't allocate memory to hold the list of input keys for the command. This only happens with an enormous number of keys or a server that's out of memory; pass fewer keys in each call. | ZDIFFZDIFFSTOREZINTER |
ERR Insufficient memory, transient memory for LCS exceeds proto-max-bulk-len |
LCS needs a working table of about 4 bytes times the product of the two string lengths, and that's more than proto-max-bulk-len, 512 MB by default, which two strings of about 11,600 bytes each already exceed. Compare shorter strings. |
LCS |
ERR Invalid argument '<argument>' for SENTINEL SET '<option>' |
You ran SENTINEL SET with a value that the option named in the message doesn't accept. quorum, down-after-milliseconds, failover-timeout and parallel-syncs need an integer of 1 or more, master-reboot-down-after-period needs 0 or more, and rename-command names can't be empty. |
SENTINEL SET |
ERR Invalid argument '<option>' to SENTINEL CONFIG SET |
You ran SENTINEL CONFIG SET with an option it doesn't support. You can set announce-ip, announce-port, announce-hostnames, resolve-hostnames, sentinel-user, sentinel-pass and loglevel. |
SENTINEL CONFIG |
ERR Invalid arguments specified for command |
COMMAND GETKEYS couldn't find the keys in the command you passed, because its arguments don't add up, for example a key count larger than the number of keys given. Pass the full command exactly as you would run it. |
COMMAND GETKEYSCOMMAND GETKEYSANDFLAGS |
ERR invalid array index |
An array index you passed isn't a whole number from 0 to 18446744073709551614; negative numbers and text aren't accepted. Pass a valid index. ARGREP also accepts - and + for the first and last index. |
ARDELARDELRANGEARGET |
ERR Invalid base port specified: <port> |
The port you passed to CLUSTER MEET isn't a whole number. Pass the node's client port, such as 6379. |
CLUSTER MEET |
ERR Invalid bitfield type. Use something like i16 u8. Note that u64 is not supported but i64 is. |
A bitfield type is i for signed or u for unsigned, followed by a width in bits: i1 to i64, or u1 to u63. Unsigned 64-bit fields aren't supported, so use i64 instead. |
BITFIELDBITFIELD_ |
ERR Invalid bus port specified: <bus_port> |
The cluster bus port you passed to CLUSTER MEET isn't a whole number. Pass the node's bus port, or leave it out to use the client port plus 10000. |
CLUSTER MEET |
ERR Invalid client ID |
One of the values after CLIENT LIST ID isn't an integer. Pass the numeric client IDs that CLIENT ID or CLIENT LIST shows. |
CLIENT LIST |
ERR Invalid CLUSTER SETSLOT action or number of arguments. Try CLUSTER HELP |
CLUSTER SETSLOT takes a slot and then IMPORTING, MIGRATING, or NODE followed by a node ID, or STABLE alone. Check the action name and the number of arguments. |
CLUSTER SETSLOT |
ERR Invalid command passed to redis.acl_check_cmd() script: <script>, on <source>:<line>. |
Your script called redis.acl_check_cmd() with a first argument that isn't a command or subcommand this server knows. Pass the command name first, followed by its arguments, for example redis.acl_check_cmd('get', 'key'). |
EVALEVALSHAEVAL_ |
ERR Invalid command specified |
You passed COMMAND GETKEYS or COMMAND GETKEYSANDFLAGS a command or subcommand that this server doesn't know. Check the spelling, and that the module that adds the command is loaded. |
COMMAND GETKEYSCOMMAND GETKEYSANDFLAGS |
ERR Invalid condition. Use IFEQ, IFNE, IFDEQ, or IFDNE |
The condition you passed to DELEX isn't one it knows. Use IFEQ or IFNE with a value, or IFDEQ or IFDNE with a digest of the value. |
DELEX |
ERR Invalid config epoch specified: <epoch> |
CLUSTER SET-CONFIG-EPOCH takes a config epoch of 0 or more, and you passed a negative number. While you create a cluster, give each node a different epoch. |
CLUSTER SET-CONFIG-EPOCH |
ERR invalid COUNT |
The count you passed isn't valid. For VSIM, the value after COUNT must be a whole number greater than 0. For ARLASTITEMS, the count must be an integer, and 0 or less returns an empty array. |
VSIMARLASTITEMS |
ERR invalid cursor |
The cursor you passed to SCAN, HSCAN, SSCAN, or ZSCAN isn't a whole number of 0 or more. Start with 0, then pass back the exact cursor that the previous call returned. |
HSCANSCANSSCANZSCAN |
ERR invalid end ID for the interval |
You passed an exclusive end ID, marked with (, that has no ID before it, such as (0-0. Use a larger end ID, or remove the (. |
XRANGEXREVRANGEXPENDING |
ERR Invalid engine in script shebang |
Your script starts with #!, but Redis couldn't parse that first line, usually because it has an unbalanced quote. Make the first line #!lua, optionally followed by flags= and a comma-separated list of flags, then a newline. |
EVALEVAL_SCRIPT LOAD |
ERR invalid expire time in '<command>' command |
The expiry time is out of range for the command named in the message. For SET, SETEX, GETEX, and similar commands it must be greater than 0; for EXPIRE, HEXPIRE, and their variants, it's so large that it would overflow once converted to an absolute time in milliseconds. |
EXPIREEXPIREATPEXPIRE |
ERR invalid expire time, must be >= 0 |
The expiration time you passed is negative. Pass 0 or more: a number of seconds or milliseconds for relative times, or a Unix timestamp for EXAT, PXAT, HEXPIREAT and HPEXPIREAT. |
HEXPIREHEXPIREATHGETEX |
ERR invalid first DB index |
The first database number in SWAPDB isn't a whole number. Pass two database numbers, such as SWAPDB 0 1. |
SWAPDB |
ERR Invalid FREQ value, must be >= 0 and <= 255 |
The value after FREQ in RESTORE is out of range. Pass a least frequently used (LFU) counter from 0 to 255. |
RESTORE |
ERR Invalid IDLE option argument for XCLAIM |
The value after IDLE in XCLAIM isn't an integer. Pass the idle time to set, in milliseconds. |
XCLAIM |
ERR Invalid IDLETIME value, must be >= 0 |
The value after IDLETIME in RESTORE is negative. Pass the idle time in seconds, as 0 or more. |
RESTORE |
ERR Invalid IP address or hostname specified |
You ran SENTINEL MONITOR with an address that isn't a valid Internet Protocol (IP) address, or a host name that Sentinel can't resolve. Sentinel accepts host names only when resolve-hostnames is yes; otherwise, pass an IP address. |
SENTINEL MONITOR |
ERR Invalid library metadata |
The first line of your library starts with #! but can't be read, because no newline follows it or it has an unbalanced quote. Put #!lua name=mylib alone on the first line, followed by a newline and then the code. |
FUNCTION LOADFUNCTION RESTORE |
ERR Invalid log level. script: <script>, on <source>:<line>. |
Your script called redis.log() with a log level outside the valid range of 0 to 3. Use one of the constants redis.LOG_DEBUG, redis.LOG_VERBOSE, redis.LOG_NOTICE or redis.LOG_WARNING. |
EVALEVALSHAEVAL_ |
ERR invalid longitude,latitude pair <longitude>,<latitude> |
The coordinates in the message are out of range: longitude must be between -180 and 180, and latitude between -85.05112878 and 85.05112878. Redis takes longitude first, so check that you didn't swap the two. | GEOADDGEORADIUSGEORADIUSBYMEMBER |
ERR Invalid master port |
The port you passed to REPLICAOF isn't an integer from 0 to 65535. Pass the port the primary listens on, usually 6379, or use REPLICAOF NO ONE to stop replicating. |
REPLICAOFSLAVEOF |
ERR Invalid metadata value given: <value> |
The shebang line of your library has an option other than name=, shown in the message. Libraries accept only name=; set flags such as no-writes on each function in redis.register_function instead. |
FUNCTION LOADFUNCTION RESTORE |
ERR Invalid metadata value, name argument was given multiple times |
The shebang line of your library has more than one name= option. Keep a single name= with the library's name. |
FUNCTION LOADFUNCTION RESTORE |
ERR Invalid min-idle-time argument for XAUTOCLAIM |
The minimum idle time you passed to XAUTOCLAIM, the argument after the consumer name, isn't an integer. Pass it in milliseconds, for example 60000 for one minute. |
XAUTOCLAIM |
ERR Invalid min-idle-time argument for XCLAIM |
The minimum idle time you passed to XCLAIM, the argument after the consumer name, isn't an integer. Pass it in milliseconds, for example 60000 for one minute. |
XCLAIM |
ERR Invalid node address specified: <ip>:<port> |
CLUSTER MEET needs a numeric address, not a hostname, and ports from 1 to 65535, and the address or a port isn't valid. If you have a hostname, resolve it to its address first. |
CLUSTER MEET |
ERR Invalid node id length <length> |
A CLUSTER SYNCSLOTS CONF message carried a node ID that isn't 40 characters long. Nodes send this message to each other during an atomic slot migration, so check that all nodes run the same Redis version. |
CLUSTER SYNCSLOTS |
ERR Invalid number of arguments specified for command |
You passed COMMAND GETKEYS or COMMAND GETKEYSANDFLAGS a command with the wrong number of arguments for it, such as SET with no key. Pass the full command with all of its arguments. |
COMMAND GETKEYSCOMMAND GETKEYSANDFLAGS |
ERR invalid number of fields |
The number after FIELDS in HGETEX or HSETEX is 0, negative, or not an integer. Pass the number of fields that follow it, from 1 to 2147483647. |
HGETEXHSETEX |
ERR invalid number of ranges |
The number after RANGES in TRIMSLOTS must be from 1 to 16384, and the command must then list exactly that many pairs of start and end slots. Check the count against the pairs you passed. |
TRIMSLOTS |
ERR invalid number of slot ranges: <count> |
You passed 16384 or more slot ranges, which is more than the number of slots in a cluster. Merge neighboring slots into fewer ranges, for example one range 0 999 instead of a range for each slot. |
CLUSTER MIGRATIONCLUSTER SYNCSLOTSSFLUSHTRIMSLOTS |
ERR invalid numkeys value |
The first argument of MSETEX, the number of keys, is 0, negative, or not an integer. Pass the number of key and value pairs that follow it, which must be at least 1. |
MSETEX |
ERR Invalid or out of range slot |
A hash slot number in the command isn't a whole number from 0 to 16383. Check the slot arguments. CLUSTER KEYSLOT shows the slot of a key. |
CLUSTER SLOT-STATSCLUSTER SYNCSLOTSHOTKEYS STARTSFLUSHTRIMSLOTS |
ERR Invalid OVERFLOW type specified |
The value after OVERFLOW in BITFIELD isn't valid. Use WRAP, SAT, or FAIL. |
BITFIELDBITFIELD_ |
ERR Invalid port |
You ran SENTINEL MONITOR with a port that isn't an integer. Pass the port that the primary listens on as a number, such as 6379. |
SENTINEL MONITOR |
ERR Invalid port number. |
You ran SENTINEL MONITOR with a port outside the range 0 to 65535. Pass the port that the primary listens on, such as 6379. |
SENTINEL MONITOR |
ERR Invalid quorum |
You ran SENTINEL MONITOR with a quorum that isn't an integer. The quorum is the number of Sentinels that must agree that the primary is down; pass it as a whole number of 1 or more. |
SENTINEL MONITOR |
ERR invalid regular expression: <reason> |
An RE pattern that you passed to ARGREP isn't a valid extended regular expression; the end of the message says what's wrong, such as a missing parenthesis. Fix the pattern, and escape characters that have a special meaning. |
ARGREP |
ERR Invalid replication flags. Use REPL_AOF, REPL_REPLICA, REPL_ALL or REPL_NONE. script: <script>, on <source>:<line>. |
Your script passed redis.set_repl() a number that isn't a valid combination of replication flags. Pass one of the constants redis.REPL_NONE, redis.REPL_AOF, redis.REPL_REPLICA or redis.REPL_ALL. |
EVALEVALSHAEVAL_ |
ERR Invalid RETRYCOUNT option argument for XCLAIM |
The value after RETRYCOUNT in XCLAIM isn't an integer. Pass the delivery count to set, as a whole number. |
XCLAIM |
ERR Invalid RETRYCOUNT value, must be >= 0 |
You passed XNACK a negative RETRYCOUNT. Pass 0 or more to set the delivery count of the entries you release. |
XNACK |
ERR Invalid script shebang |
Your script starts with #! but contains no newline, so the shebang line never ends. Put the shebang, such as #!lua, alone on the first line, and the Lua code on the lines after it. |
EVALEVAL_SCRIPT LOAD |
ERR invalid second DB index |
The second database number in SWAPDB isn't a whole number. Pass two database numbers, such as SWAPDB 0 1. |
SWAPDB |
ERR invalid size |
You ran ARRING with a ring size that isn't an integer. Pass the number of slots in the ring buffer as a whole number of 1 or more. |
ARRING |
ERR Invalid slot |
CLUSTER COUNTKEYSINSLOT takes a hash slot from 0 to 16383, and you passed a number outside that range. |
CLUSTER COUNTKEYSINSLOT |
ERR Invalid slot info: <slot_info> |
A CLUSTER SYNCSLOTS CONF message carried slot details that aren't three non-negative numbers, slot, key count, and expiry count, separated by colons. Nodes send this message to each other during an atomic slot migration, so check that all nodes run the same Redis version. |
CLUSTER SYNCSLOTS |
ERR Invalid slot or number of keys |
CLUSTER GETKEYSINSLOT needs a hash slot from 0 to 16383 and a count of 0 or more, and one of them is out of range. |
CLUSTER GETKEYSINSLOT |
ERR invalid start ID for the interval |
You passed an exclusive start ID, marked with (, that has no ID after it, because it's the largest possible ID. Use a smaller start ID, or remove the (. |
XRANGEXREVRANGEXPENDINGXAUTOCLAIM |
ERR Invalid stream ID specified as stream command argument |
A stream entry ID you passed isn't valid. Write it as milliseconds and a sequence number joined by a dash, such as 1526919030474-55, or as the milliseconds alone. - and + work only where the command allows them. |
XACKXACKDELXADD |
ERR Invalid task id |
During an atomic slot migration, a node opened its data connection with a task ID that isn't 40 characters long. This is internal to the migration. Check CLUSTER MIGRATION STATUS on the importing node, and import again if the task failed. |
CLUSTER SYNCSLOTS |
ERR Invalid TIME option argument for XCLAIM |
The value after TIME in XCLAIM isn't an integer. Pass a Unix time in milliseconds. |
XCLAIM |
ERR Invalid TTL value, must be >= 0 |
The time to live (TTL) you passed to RESTORE is negative. Pass the TTL in milliseconds, 0 for no expiry, or a Unix time in milliseconds together with ABSTTL. |
RESTORE |
ERR Invalid value '<value>' to SENTINEL CONFIG SET '<option>' |
You ran SENTINEL CONFIG SET with a value that the option named in the message doesn't accept. resolve-hostnames and announce-hostnames take yes or no, announce-port takes 0 to 65535, and loglevel takes debug, verbose, notice, warning or nothing. |
SENTINEL CONFIG |
ERR Key should be of string type if conditions are specified |
DELEX with a condition works only on string keys, and this key holds another type. Use DEL without a condition, or check the key's type with TYPE. |
DELEX |
ERR LBOUND can't be greater than UBOUND |
You passed INCREX an LBOUND that's larger than its UBOUND. Make LBOUND the lowest and UBOUND the highest value that the result may take. |
INCREX |
ERR LBOUND is not a valid float |
With BYFLOAT, INCREX reads LBOUND as a decimal number, and the value you passed isn't one. Pass a number such as 0 or -1.5. |
INCREX |
ERR LBOUND is not an integer or out of range |
Without BYFLOAT, INCREX reads LBOUND as a 64-bit integer, and the value you passed isn't one. Pass a whole number, or add BYFLOAT to use decimal bounds. |
INCREX |
ERR Library '<library>' already exists |
A library with the name in the message is already loaded. To overwrite it, run FUNCTION LOAD REPLACE, or give the new library a different name= in its shebang line. |
FUNCTION LOADFUNCTION RESTORE |
ERR Library <library> already exists |
The payload you passed to FUNCTION RESTORE has a library with the same name as one that's already loaded, and the default APPEND policy doesn't overwrite. Add REPLACE to overwrite libraries with the same name, or FLUSH to delete all existing libraries first. |
FUNCTION RESTORE |
ERR library name argument was not given |
You ended FUNCTION LIST with LIBRARYNAME but no pattern after it. Add a library name pattern, such as LIBRARYNAME mylib*. |
FUNCTION LIST |
ERR Library name was not given |
The shebang line of your library has no name= option. Start the code with a line such as #!lua name=mylib, followed by a newline. |
FUNCTION LOADFUNCTION RESTORE |
ERR Library names can only contain letters, numbers, or underscores(_) and must be at least one character long |
The library name after name= is empty or has characters other than letters, digits, and underscores. Rename the library using only those characters, such as name=my_lib. |
FUNCTION LOADFUNCTION RESTORE |
ERR Library not found |
No library with the name you passed to FUNCTION DELETE is loaded. Library names are case-sensitive, so check the exact name with FUNCTION LIST. |
FUNCTION DELETE |
ERR LIMIT can't be negative |
You passed a LIMIT that's negative or not an integer. Pass the most elements to count, or 0 for no limit. |
SINTERCARDSUNIONCARDSDIFFCARD |
ERR Limit has to lie in between 1 and 16384 (maximum number of slots). |
The value after LIMIT in CLUSTER SLOT-STATS must be a whole number from 1 to 16384. Pass a value in that range, or leave out LIMIT to get all slots. |
CLUSTER SLOT-STATS |
ERR LIMIT must be positive |
You passed ARSCAN or ARGREP a LIMIT of 0 or less. Pass a count of 1 or more, or leave out LIMIT to return every match in the range. |
ARSCANARGREP |
ERR Lua redis lib command arguments must be strings or integers script: <script>, on <source>:<line>. |
Your script passed redis.call(), redis.pcall() or redis.acl_check_cmd() an argument that isn't a string or a number, such as a table, a boolean or nil. Convert each argument to a string or number, and pass the elements of a table as separate arguments. |
EVALEVALSHAEVAL_ |
ERR luaRedisGenericCommand() recursive call detected. Are you doing funny stuff with Lua debug hooks? |
The internal function behind redis.call() and redis.pcall(), named in the message, was called again while it was still running, which only Lua debug hooks can cause. Scripts can't set debug hooks in normal use, so look for modified Lua code or a debugging tool. |
EVALEVALSHAEVAL_ |
ERR Main channel connection is not established |
During an atomic slot migration, the importing node's main connection to this node closed before its data connection was set up, so this attempt failed. Check the network between the nodes. CLUSTER MIGRATION STATUS shows the task's state and retries. |
CLUSTER SYNCSLOTS |
ERR Mandatory argument FIELDS is missing or not at the right position |
The argument after the key isn't FIELDS. These commands need FIELDS right after the key, then the number of fields, then the field names, for example HTTL key FIELDS 2 f1 f2. |
HGETDELHEXPIRETIMEHPEXPIRETIME |
ERR Master is down or failed, please use CLUSTER FAILOVER FORCE |
A normal CLUSTER FAILOVER needs the primary to be reachable, and this replica sees it as down or failed. Use CLUSTER FAILOVER FORCE to fail over without the primary, or TAKEOVER if most primaries are unreachable too. |
CLUSTER FAILOVER |
ERR Master name must not contain control characters |
You ran SENTINEL MONITOR with a primary name that contains a control character, such as a newline or a tab. Choose a name made of printable characters only. |
SENTINEL MONITOR |
ERR MATCH requires a value argument |
You ran AROP with the MATCH operation but didn't pass exactly one value after it. Add the value to count, for example AROP key 0 100 MATCH done. |
AROP |
ERR max number of clients + cluster connections reached |
The server has reached its maxclients limit, which counts both client connections and connections to other cluster nodes. Redis sends this error to the new connection and closes it; close idle connections, or raise maxclients. How to fix it |
New connections |
ERR max number of clients reached |
The server already has maxclients connections, 10000 by default, so it refused the new one and closed it. Close idle connections or fix connection leaks in your app, use a connection pool, or raise maxclients. How to fix it |
New connections |
ERR maxage is not an integer or out of range |
The value after CLIENT KILL MAXAGE isn't an integer. Pass the minimum connection age in seconds, such as MAXAGE 3600. |
CLIENT KILL |
ERR maxage should be greater than 0 |
The value after CLIENT KILL MAXAGE is 0 or negative. Pass a positive number of seconds; Redis then kills the connections that are older than that. |
CLIENT KILL |
ERR MAXCOUNT must be a positive integer |
You passed XREAD or XREADGROUP a MAXCOUNT of 0 or less. Pass the most entries to return across all the streams, which must be 1 or more. |
XREADXREADGROUP |
ERR MAXCOUNT must be greater than or equal to COUNT |
MAXCOUNT limits the total number of entries across all the streams, so it can't be smaller than COUNT, the limit for each stream. Raise MAXCOUNT or lower COUNT. |
XREADXREADGROUP |
ERR MAXLEN can't be negative |
You passed LPOS a MAXLEN that's negative or not an integer. Pass the number of elements to compare, or 0 to search the whole list. |
LPOS |
ERR MAXSIZE must be a positive integer |
You passed XREAD or XREADGROUP a MAXSIZE of 0 or less. Pass the largest reply size you want, in bytes, which must be 1 or more. |
XREADXREADGROUP |
ERR METRICS count does not match number of metric types provided |
The count after METRICS in HOTKEYS START is larger than the number of metric names that follow it. Make the count match the names, as in METRICS 1 CPU or METRICS 2 CPU NET. |
HOTKEYS START |
ERR METRICS count must be > 0 and <= 2 |
The count after METRICS in HOTKEYS START isn't 1 or 2. Pass the number of metric names that follow it, which can be CPU, NET, or both. |
HOTKEYS START |
ERR METRICS CPU defined more than once! |
The METRICS list in HOTKEYS START names CPU more than once. List each metric once, as in METRICS 2 CPU NET. |
HOTKEYS START |
ERR METRICS NET defined more than once! |
The METRICS list in HOTKEYS START names NET more than once. List each metric once, as in METRICS 2 CPU NET. |
HOTKEYS START |
ERR METRICS no valid metrics passed. Supported: CPU|NET |
None of the metric names after METRICS in HOTKEYS START is CPU or NET. Name at least one of them, as in METRICS 1 CPU. |
HOTKEYS START |
ERR METRICS parameter is required |
HOTKEYS START must begin with METRICS, a count, and the metric names, before any other option. Start the command as HOTKEYS START METRICS 1 CPU, then add COUNT, DURATION, SAMPLE, or SLOTS. |
HOTKEYS START |
ERR min or max is not a float |
A score bound you passed isn't a number. Use a number, a number with ( in front to exclude it, or -inf and +inf for no limit. |
ZREMRANGEBYLEXZREMRANGEBYRANKZREMRANGEBYSCORE |
ERR min or max not valid string range item |
A lexicographic bound you passed doesn't start with [ (inclusive) or ( (exclusive), and isn't - or +. Write bounds such as [a or (b, or use - and + for the lowest and highest values. |
ZREMRANGEBYLEXZREMRANGEBYRANKZREMRANGEBYSCORE |
ERR min-idle-time is not an integer or out of range |
The value after CLAIM in XREADGROUP isn't an integer. Pass the minimum time, in milliseconds, that a pending entry must be idle before this consumer claims it. |
XREADXREADGROUP |
ERR min-idle-time must be a positive integer |
The value after CLAIM in XREADGROUP is negative. Pass 0 or more milliseconds; 0 is accepted even though the message says positive. |
XREADXREADGROUP |
ERR Missing argument '<option>' value |
You ran SENTINEL CONFIG SET, and the option named in the message, the last one in the command, has no value after it. Give every option a value, in name and value pairs. |
SENTINEL CONFIG |
ERR missing expire time |
You ended HGETEX or HSETEX with EX, PX, EXAT or PXAT and no time after it. Put the time right after the option, for example EX 60. |
HGETEXHSETEX |
ERR missing FIELDS argument |
The command has no FIELDS block, so Redis doesn't know which fields to act on. Add FIELDS, the number of fields, and the field names, for example HEXPIRE key 60 FIELDS 1 field. |
HGETEXHSETEXHEXPIRE |
ERR Missing GROUP option for XREADGROUP |
You ran XREADGROUP without the GROUP option. Add GROUP followed by the group name and the consumer name before STREAMS, or use XREAD to read without a group. |
XREADGROUP |
ERR Missing library metadata |
The code you passed to FUNCTION LOAD doesn't start with a shebang line. Library code must begin with a line such as #!lua name=mylib, followed by a newline and then the Lua code. |
FUNCTION LOADFUNCTION RESTORE |
ERR missing ranges argument |
The first argument of TRIMSLOTS must be the keyword RANGES, followed by the number of ranges and the ranges. Nodes normally send this command themselves after an atomic slot migration. |
TRIMSLOTS |
ERR missing subcommand. Try <command> HELP. |
You sent a command that only works with a subcommand, such as CONFIG or CLIENT, without one. Add the subcommand, and run the command followed by HELP to list them. For built-in commands, Redis usually reports a wrong number of arguments instead. |
Commands with subcommands |
ERR mode must be SILENT, FAIL, or FATAL |
The argument after the group name in XNACK isn't a valid mode. Pass SILENT, FAIL or FATAL, which decide how the delivery count of the released entries changes. |
XNACK |
ERR Module blocking client on auth when not currently undergoing module authentication |
A module tried to block a client for authentication while that client wasn't being authenticated by a module. This is a bug in the module; report it to its developers. | Module commands |
ERR MODULE command not allowed. If the enable-module-command option is set to "local", you can run it from a local connection, otherwise you need to set this option in the configuration file, and then restart the server. |
MODULE is turned off on this server, which is the default, so you can't load or unload modules at runtime. Set enable-module-command to yes, or to local for local connections only, in the configuration file and restart Redis, or load modules there with loadmodule. |
MODULE LOADMODULE LOADEXMODULE UNLOAD |
ERR module key failed to copy |
COPY asked the module that owns the key's data type to duplicate the value, and the module reported a failure. Check the Redis log and the module's documentation, or re-create the value under the new key with the module's own commands. |
COPY |
ERR MONITOR isn't allowed for DENY BLOCKING client |
You ran MONITOR where Redis expects exactly one reply for each command, such as inside a MULTI transaction. Run MONITOR on its own, on a connection that you use only for monitoring. |
MONITOR |
ERR MOVE is not allowed in cluster mode |
In cluster mode there's only database 0, so MOVE can't move keys between databases. To move keys to another node, use MIGRATE. |
MOVE |
ERR MULTI calls can not be nested |
You sent MULTI while a transaction was already open on this connection, and transactions can't be nested. The open transaction continues, so finish it with EXEC or DISCARD before you start another. |
MULTI |
ERR Multiple condition flags specified |
You passed more than one of NX, XX, GT and LT, but these commands accept only one condition. Choose the one condition that decides whether the expiration is set. |
HEXPIREHEXPIREATHPEXPIREHPEXPIREAT |
ERR Multiple filters of the same type are disallowed. |
CLUSTER SLOT-STATS got LIMIT twice, or more than one of ASC and DESC. Pass each of these options at most once. |
CLUSTER SLOT-STATS |
ERR must be exactly 16 hexadecimal characters |
The digest you passed to IFDEQ or IFDNE in SET or DELEX isn't 16 characters long. Pass the value's digest exactly as the DIGEST command returns it. |
DELEXPSETEXSETSETEXSETNX |
ERR need numeric height |
The height after BYBOX in GEOSEARCH or GEOSEARCHSTORE isn't a number. Pass the width and the height as numbers, then the unit, as in BYBOX 10 5 km. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR need numeric radius |
The radius in GEORADIUS, GEORADIUSBYMEMBER, or after BYRADIUS isn't a number. Pass the radius as a number followed by a separate unit, as in BYRADIUS 5 km, not 5km. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR need numeric width |
The width after BYBOX in GEOSEARCH or GEOSEARCHSTORE isn't a number. Pass the width and the height as numbers, then the unit, as in BYBOX 10 5 km. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR No backup in progress |
BACKUP ABORT found no backup to cancel. Either none was started, or it was already sealed, aborted, or failed. Check the state with BACKUP STATUS, and remove a sealed or failed backup with BACKUP CLEANUP. |
BACKUP ABORT |
ERR No backup ready to seal (must be in the incrementing state) |
BACKUP SEAL works only after the backup's snapshot is complete, when BACKUP STATUS reports the state incrementing. Wait for the snapshot to finish, or run BACKUP START first if no backup is running. |
BACKUP SEAL |
ERR No failover in progress. |
You ran FAILOVER ABORT, but no failover is running, so there's nothing to cancel. It may have finished or timed out already. |
FAILOVER |
ERR No functions registered |
Your library code ran without calling redis.register_function, so it defines no functions. Every library must register at least one function in its top-level code. |
FUNCTION LOADFUNCTION RESTORE |
ERR No ID yet |
CLUSTER MYID found that this node has no node ID yet. Cluster nodes get an ID when they start, so this normally doesn't happen. Check that the server finished starting in cluster mode. |
CLUSTER MYID |
ERR No samples available for event '<event>' |
LATENCY GRAPH has no samples for the event in the message. Redis records an event only when it takes longer than latency-monitor-threshold milliseconds, and the default of 0 turns the monitor off; run LATENCY LATEST to see which events have samples. |
LATENCY GRAPHLATENCY HISTORY |
ERR No shard ID yet |
CLUSTER MYSHARDID found that this node has no shard ID yet. Cluster nodes get one when they start, so this normally doesn't happen. Check that the server finished starting in cluster mode. |
CLUSTER MYSHARDID |
ERR No shutdown in progress. |
You ran SHUTDOWN ABORT, but no shutdown is in progress, so there's nothing to cancel. A shutdown can be aborted only while it's waiting, for example for replicas to catch up. |
SHUTDOWN |
ERR No slot migration task in progress |
During an atomic slot migration, the importing node opened its data connection, but this node isn't running any migration, for example because it was canceled or timed out. Check CLUSTER MIGRATION STATUS on the importing node. |
CLUSTER SYNCSLOTS |
ERR No such client |
No connection matches the address you passed to CLIENT KILL in its old form, with only an address and port. Check the addr field in CLIENT LIST, or use the newer form, such as CLIENT KILL ID 42, which returns how many clients it killed. |
CLIENT KILL |
ERR no such fieldset |
HIMPORT SET names a fieldset that this connection hasn't prepared. Fieldsets belong to the connection that ran HIMPORT PREPARE, and you lose them when you reconnect, run RESET or HIMPORT DISCARD, or a script ends, so prepare it again on the same connection. |
HIMPORT SET |
ERR no such key |
The command needs a key that already exists, and the key you passed doesn't, for example the source key of RENAME, the list in LSET, or the stream in XINFO or XSETID. Check the key name and the database you're connected to. |
RENAMERENAMENXARINFO |
ERR No such master with that name |
This Sentinel doesn't monitor a primary with the name you passed. Names are case-sensitive; run SENTINEL MASTERS to list the names it knows, or add the primary with SENTINEL MONITOR. |
SENTINEL CKQUORUMSENTINEL FAILOVERSENTINEL MASTERand 3 moreSENTINEL REMOVESENTINEL REPLICASSENTINEL SENTINELS |
ERR No such message in stream |
XIDMPRECORD named an entry ID that isn't in the stream, for example because the entry was deleted or trimmed. Pass the ID of an existing entry. |
XIDMPRECORD |
ERR No such user '<username>' |
The user name you passed to CLIENT KILL USER doesn't exist. User names are case-sensitive, so check them with ACL USERS. |
CLIENT KILL |
ERR Node <node_id> not found in cluster |
During an atomic slot migration, a node sent an ID that this node doesn't know. Make sure the importing node has joined the cluster and that CLUSTER NODES on this node lists it, then import again. |
CLUSTER SYNCSLOTS |
ERR Node config epoch is already non-zero |
CLUSTER SET-CONFIG-EPOCH works only on a fresh node whose config epoch is still 0, and this node already has one. You only need this command while creating a new cluster. |
CLUSTER SET-CONFIG-EPOCH |
ERR not enough slot numbers provided |
The count after SLOTS in HOTKEYS START is larger than the number of slot numbers that follow it. Make the count match the slots you list. |
HOTKEYS START |
ERR not supported for this module key |
The key holds a module data type that doesn't support COPY. In Redis 8.10 this includes vector sets and the Bloom filter, cuckoo filter, count-min sketch, Top-K, and t-digest types, while JSON and time series keys can be copied. |
COPY |
ERR Notification script seems non existing or non executable |
You ran SENTINEL SET with notification-script, but the path doesn't point to a file that the Sentinel process can execute. Check the path, and make the file executable for the user that runs Sentinel. |
SENTINEL SET |
ERR notification-script must not contain control characters |
You ran SENTINEL SET with a notification-script path that contains a control character, such as a newline or a tab. Pass a plain file path. |
SENTINEL SET |
ERR NOVALUES option can only be used in HSCAN |
NOVALUES returns only the field names of a hash, so it works only with HSCAN. Remove it from SCAN, SSCAN, or ZSCAN. |
SCANSSCANZSCAN |
ERR Number of fields must be a positive integer |
The number after FIELDS is 0, negative, or not an integer. Pass the number of field names that follow it, which must be at least 1. |
HGETDELHEXPIRETIMEHPEXPIRETIME |
ERR number of IDs doesn't match numids |
In XNACK, the number after IDS is larger than the number of IDs that follow it. Make the count equal to the number of IDs you list. |
XNACK |
ERR Number of IDs must be a positive integer |
The number after IDS is 0, negative, or not an integer. Pass the number of entry IDs that follow it, which must be at least 1. |
XACKDELXDELEX |
ERR Number of keys can't be greater than number of args |
The numkeys argument of a command such as EVAL, FCALL, or SINTERCARD is larger than the number of arguments that follow it. Set it to the number of key names you pass right after it, and put any other arguments after the keys. |
EVALEVALSHAFCALL |
ERR Number of keys can't be negative |
The numkeys argument of EVAL, EVALSHA, FCALL, or FCALL_RO is negative. Pass 0 if the script or function uses no keys, or otherwise the number of key names that follow. |
EVALEVALSHAFCALLFCALL_ |
ERR numids must be a positive integer |
In XNACK, the number after IDS is 0, negative, or not an integer. Pass the number of IDs that follow it, which must be at least 1. |
XNACK |
ERR numkeys should be greater than 0 |
The number of keys you passed is 0, negative, or not an integer. Pass the number of keys that follow it, which must be at least 1. | BLMPOPLMPOPSINTERCARD |
ERR NX and XX, GT or LT options at the same time are not compatible |
You combined NX with XX, GT, or LT in an expire command. NX sets an expiry only when the key has none, so it can't be combined with options that need an existing expiry; XX with GT or LT is allowed. |
EXPIREEXPIREATPEXPIREPEXPIREAT |
ERR offset is out of range |
You passed SETRANGE a negative offset. Pass a byte position of 0 or more; positions past the end pad the string with zero bytes. |
SETRANGE |
ERR One or more scores can't be converted into double |
SORT sorts numerically by default, and at least one element, or a value it read through BY, isn't a number. Add ALPHA to sort the values as strings, or make sure every value is a number. |
SORTSORT_ |
ERR Only HELLO messages are accepted by Sentinel instances. |
You ran PUBLISH against a Sentinel on a channel other than __sentinel__:hello, the only channel that Sentinels use to announce themselves to each other. Publish your own messages to a Redis server, not to Sentinel. |
PUBLISH |
ERR Only one of EX, PX, EXAT, PXAT or KEEPTTL arguments can be specified |
You ran HSETEX with more than one expiration option. Pass only one of EX, PX, EXAT, PXAT or KEEPTTL. |
HGETEXHSETEX |
ERR Only one of EX, PX, EXAT, PXAT or PERSIST arguments can be specified |
You ran HGETEX with more than one expiration option. Pass only one of EX, PX, EXAT, PXAT or PERSIST, or none to leave the fields' expiration as it is. |
HGETEXHSETEX |
ERR Only one of FXX or FNX arguments can be specified |
You ran HSETEX with both FXX and FNX, or with one of them twice. Use FXX to set the fields only if they all exist, or FNX to set them only if none of them exist. |
HGETEXHSETEX |
ERR Only SENTINEL CONFIG GET <param> [<param> <param> ...] / SET <param> <value> [<param> <value> ...] are supported. |
You ran SENTINEL CONFIG with a subcommand other than GET or SET, or with too few arguments, such as SET with one option and no value. Use SENTINEL CONFIG GET with parameter names, or SENTINEL CONFIG SET with name and value pairs. |
SENTINEL CONFIG |
ERR OPTIN and OPTOUT are not compatible with BCAST |
You combined BCAST with OPTIN or OPTOUT in CLIENT TRACKING. Broadcasting mode sends invalidations for every key that matches your prefixes, so opting reads in or out doesn't apply; choose either BCAST or one of the opt modes. |
CLIENT TRACKING |
ERR overlapping import exists for slot range: <start_slot>-<end_slot> |
Another import task already covers the slot range in the message. Check it with CLUSTER MIGRATION STATUS ALL, then wait for it or cancel it with CLUSTER MIGRATION CANCEL before you import the range again. |
CLUSTER MIGRATIONCLUSTER SYNCSLOTS |
ERR Parameter `numFields` should be greater than 0 |
The number after FIELDS is 0, negative, or not an integer. Pass the number of field names that follow it, from 1 to 2147483647. |
HEXPIREHEXPIREATHPEXPIREHPEXPIREAT |
ERR Please specify at least one argument for this redis lib call script: <script>, on <source>:<line>. |
Your script called redis.call(), redis.pcall() or redis.acl_check_cmd() with no arguments. Pass the command name first, followed by its arguments, for example redis.call('GET', KEYS[1]). |
EVALEVALSHAEVAL_ |
ERR Please use EVAL instead of EVALSHA for debugging |
This connection is in script debugging mode after SCRIPT DEBUG YES or SCRIPT DEBUG SYNC, and the debugger only works with EVAL, which sends the script's source. Run the script with EVAL, or turn debugging off with SCRIPT DEBUG NO. |
EVALSHA |
ERR Please use SETSLOT only with masters. |
CLUSTER SETSLOT changes slot ownership and must be sent to a primary, and this node is a replica. Send it to the primary instead. |
CLUSTER SETSLOT |
ERR Pre-GA function format not supported |
The FUNCTION RESTORE payload uses the format of a Redis 7.0 release candidate from before general availability (GA), which current versions can't read. Load the libraries from their source code with FUNCTION LOAD instead. |
FUNCTION RESTORE |
ERR Prefix '<prefix>' overlaps with an existing prefix '<existing_prefix>'. Prefixes for a single client must not overlap. |
In BCAST mode, a prefix you passed overlaps a prefix that this connection already tracks, because one starts with the other, such as user: and user:1. Keep only the shorter one, or turn tracking off and on again with the new prefixes. |
CLIENT TRACKING |
ERR Prefix '<prefix>' overlaps with another provided prefix '<other_prefix>'. Prefixes for a single client must not overlap. |
Two prefixes in the same CLIENT TRACKING call overlap, because one starts with the other, such as user: and user:1. Keep only the shorter one, which already covers the longer. |
CLIENT TRACKING |
ERR PREFIX option requires BCAST mode to be enabled |
You passed PREFIX to CLIENT TRACKING ON without BCAST. Prefixes only work in broadcasting mode, so add BCAST, or drop PREFIX to track the keys that this connection reads. |
CLIENT TRACKING |
ERR producer ID must be non-empty |
XIDMPRECORD, an internal command, got an empty producer ID, the argument after the key. Pass a non-empty string. |
XIDMPRECORD |
ERR Protocol error: expected '$', got '<character>' |
Inside a command sent with the Redis serialization protocol (RESP), an argument didn't start with $, and the character in the message came instead. Redis closes the connection; this usually means a bug in the client library, or something other than a Redis client writing to the port. |
Any command |
ERR Protocol error: invalid bulk length |
An argument's length in the Redis serialization protocol (RESP) isn't a valid number, is negative, or is larger than proto-max-bulk-len, which is 512 megabytes by default. Redis closes the connection; send smaller values, or raise proto-max-bulk-len. |
Any command |
ERR Protocol error: invalid multibulk length |
The argument count at the start of a command sent with the Redis serialization protocol (RESP) isn't a valid number, or is larger than 2147483647. Redis closes the connection; this usually points to a bug in the client library or a corrupted stream. | Any command |
ERR Protocol error: too big bulk count string |
Redis read more than 64 kilobytes while looking for the end of an argument's length line, so the request isn't valid Redis serialization protocol (RESP). Redis closes the connection; check that the client sends well-formed commands. | Any command |
ERR Protocol error: too big inline request |
Redis received more than 64 kilobytes of plain text without a newline, so it rejected it as an oversized inline command and closed the connection. Send large values with a Redis client, which uses the Redis serialization protocol (RESP), not as plain text. | Any command |
ERR Protocol error: too big mbulk count string |
Redis read more than 64 kilobytes while looking for the end of the line that gives a command's argument count, so the request isn't valid Redis serialization protocol (RESP). Redis closes the connection; check that the client sends well-formed commands. | Any command |
ERR Protocol error: unauthenticated bulk length |
This connection hasn't authenticated yet, and it sent an argument longer than 16384 bytes, which Redis refuses before authentication. Redis closes the connection; authenticate with AUTH or HELLO first, then send large values. |
Any command |
ERR Protocol error: unauthenticated multibulk length |
This connection hasn't authenticated yet, and it sent a command with more than 10 arguments, which Redis refuses before authentication. Redis closes the connection; authenticate with AUTH or HELLO first. |
Any command |
ERR Protocol error: unbalanced quotes in request |
An inline command, sent as plain text such as from telnet, has a quote that isn't closed. Redis closes the connection; close the quote, or send the command with a Redis client instead. |
Any command |
ERR Protocol version is not an integer or out of range |
The protocol version you passed to HELLO isn't an integer. Pass 2 or 3, as in HELLO 3. |
HELLO |
ERR PSUBSCRIBE isn't allowed for a DENY BLOCKING client |
PSUBSCRIBE came from a connection that must get exactly one reply per command, such as a module calling Redis, so it can't enter Pub/Sub mode. Send PSUBSCRIBE from a normal client connection instead. |
PSUBSCRIBE |
ERR Publish message is too large for cluster propagation |
In a cluster, Redis forwards each published message to the other nodes, and the forwarded message, including the channel name, must stay under 4 gigabytes. Publish smaller messages, for example by storing the payload in a key and publishing the key name. | PUBLISHSPUBLISH |
ERR Quorum must be 1 or greater. |
You ran SENTINEL MONITOR with a quorum of 0 or less. Pass the number of Sentinels that must agree that the primary is down, which must be at least 1 and is usually a majority of your Sentinels. |
SENTINEL MONITOR |
ERR radius cannot be negative |
The radius in GEORADIUS, GEORADIUSBYMEMBER, or after BYRADIUS is negative. Pass a radius of 0 or more, followed by the unit. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR range exceeds maximum of 1000000 items |
You asked ARGETRANGE for more than 1,000,000 positions, and it returns every position in the range, empty ones included. Request smaller ranges, or use ARSCAN, which returns only the positions that hold values. |
ARGETRANGE |
ERR RANK can't be zero: use 1 to start from the first match, 2 from the second ... or use negative to start from the end of the list |
You passed LPOS a RANK of 0. Use 1 for the first match, 2 for the second and so on, or a negative rank to count matches from the end of the list. |
LPOS |
ERR reached lua stack limit |
Your script returned a value nested so deeply, such as tables inside tables thousands of levels down, that Lua ran out of stack space while Redis turned it into a reply. Return a flatter structure. | EVALEVALSHAEVAL_ |
ERR Reconfiguration of scripts path is denied for security reasons. Check the deny-scripts-reconfig configuration directive in your Sentinel configuration |
You ran SENTINEL SET with notification-script or client-reconfig-script, but this Sentinel doesn't let you change script paths at runtime, which is the default. Set the script in the Sentinel configuration file, or set sentinel deny-scripts-reconfig no there and restart Sentinel. |
SENTINEL SET |
ERR redis.log() requires two arguments or more. script: <script>, on <source>:<line>. |
Your script called redis.log() with fewer than two arguments. Pass the log level first and then the message, for example redis.log(redis.LOG_NOTICE, 'done'). |
EVALEVALSHAEVAL_ |
ERR redis.register_function can only be called on FUNCTION LOAD command script: <script>, on <source>:<line>. |
Your function called redis.register_function while it ran with FCALL, for example through a reference saved while the library loaded. Only the library's top-level code can register functions, during FUNCTION LOAD, so remove the call from the function body. |
FCALLFCALL_ |
ERR redis.set_repl() requires one argument. script: <script>, on <source>:<line>. |
Your script called redis.set_repl() with no argument or with more than one. Pass exactly one flag, such as redis.REPL_ALL or redis.REPL_NONE. |
EVALEVALSHAEVAL_ |
ERR redis.setresp() requires one argument. script: <script>, on <source>:<line>. |
Your script called redis.setresp() with no argument or with more than one. Pass exactly one value, 2 or 3. |
EVALEVALSHAEVAL_ |
ERR regular expression backreferences are not supported |
An RE pattern that you passed to ARGREP uses a backreference, such as \1, which ARGREP doesn't support. Rewrite the pattern without backreferences. |
ARGREP |
ERR regular expression is empty |
You passed ARGREP an RE predicate with an empty pattern. Pass a regular expression of at least one character. |
ARGREP |
ERR regular expression is too long, maximum is 2048 bytes |
An RE pattern that you passed to ARGREP is longer than 2,048 bytes. Use a shorter pattern, or split it into several RE predicates, which ARGREP combines with OR by default. |
ARGREP |
ERR rename-command arguments must not contain control characters |
You ran SENTINEL SET with rename-command, and the old or the new command name contains a control character, such as a newline or a tab. Pass the names exactly as rename-command sets them on the Redis server. |
SENTINEL SET |
ERR Replica can't interact with the keyspace |
A connection that registered as a replica with SYNC or PSYNC then sent a command that reads or writes keys. Replication connections can't access data; open a normal connection for those commands. |
Commands that use keys |
ERR REPLICAOF not allowed in cluster mode. |
REPLICAOF and SLAVEOF don't work on a cluster node, because the cluster manages replication itself. Use CLUSTER REPLICATE with the node ID of the primary instead. |
REPLICAOFSLAVEOF |
ERR REPLICAOF not allowed while failing over. |
A failover started with FAILOVER is running, and REPLICAOF is blocked until it ends. Wait for it to finish, or cancel it with FAILOVER ABORT. |
REPLICAOFSLAVEOF |
ERR RESP version must be 2 or 3. script: <script>, on <source>:<line>. |
Your script called redis.setresp() with a value other than 2 or 3. Pass 2 or 3 to choose the version of the Redis serialization protocol (RESP) that redis.call() uses for replies inside the script. |
EVALEVALSHAEVAL_ |
ERR resulting score is not a number (NaN) |
The increment would make the member's score not a number (NaN), which happens when you add -inf to a score of +inf, or the reverse. Use a finite increment, or set the score again with ZADD. |
ZADDZINCRBY |
ERR Rewriting config file: <reason> |
CONFIG REWRITE couldn't write the configuration file, for the operating system reason at the end of the message, such as no write permission. Check that the Redis process can write to the file and to its directory. |
CONFIG REWRITE |
ERR SAMPLE ratio must be positive |
The SAMPLE ratio in HOTKEYS START isn't a positive integer. Pass 1 to track every key, or a larger number N to track each key with a probability of 1 in N. |
HOTKEYS START |
ERR Script attempted to access a non local key in a cluster node script: <script>, on <source>:<line>. |
Your script called a command on a key whose hash slot another cluster node serves, usually because the script builds key names instead of taking them from KEYS. Pass every key name in KEYS, so your client sends the script to the right node. |
EVALEVALSHAEVAL_ |
ERR Script attempted to access a slot being trimmed script: <script>, on <source>:<line>. |
Your script tried to write to a key in a hash slot whose keys this node is deleting in the background, for example after SFLUSH. Retry after the deletion finishes. |
EVALEVALSHAEVAL_ |
ERR Script attempted to access a slot not served script: <script>, on <source>:<line>. |
Your script accessed a key in a hash slot that no cluster node serves, so the cluster can't handle that key. Check CLUSTER INFO and assign the slot to a node, then retry. |
EVALEVALSHAEVAL_ |
ERR Script attempted to access keys that do not hash to the same slot script: <script>, on <source>:<line>. |
Your script accessed keys in different hash slots, and at least one of them wasn't declared in KEYS. Declare every key in KEYS, and use hash tags, such as {user1}:name and {user1}:email, to put the keys in one slot. |
EVALEVALSHAEVAL_ |
ERR Script attempted to execute a command while the cluster is down script: <script>, on <source>:<line>. |
Your script ran a command while the cluster is down, for example because some hash slots have no working node. Fix the cluster, which CLUSTER INFO reports as cluster_state:fail, then retry. How to fix it |
EVALEVALSHAEVAL_ |
ERR Script attempted to execute a write command while the cluster is down and readonly script: <script>, on <source>:<line>. |
Your script tried to write while the cluster is down. Because cluster-allow-reads-when-down is on, reads still work but writes don't; fix the cluster, which CLUSTER INFO reports as cluster_state:fail, then retry. How to fix it |
EVALEVALSHAEVAL_ |
ERR SCRIPT DEBUG must be called outside a pipeline |
You sent SCRIPT DEBUG in a pipeline, while replies to earlier commands on the connection were still waiting to be sent. Send it on its own and wait for the reply before you continue; redis-cli --ldb does this for you. |
SCRIPT DEBUG |
ERR SCRIPT FLUSH only support SYNC|ASYNC option |
You passed SCRIPT FLUSH an argument other than SYNC or ASYNC, or more than one argument. Run SCRIPT FLUSH SYNC or SCRIPT FLUSH ASYNC, or no option at all to let the lazyfree-lazy-user-flush setting choose. |
SCRIPT FLUSH |
ERR Script killed by user with SCRIPT KILL... script: <script>, on <source>:<line>. |
Your script ran for too long, and another client stopped it with SCRIPT KILL or FUNCTION KILL. It hadn't changed any data yet, so nothing was left half done. Find out why it runs so long, for example an endless loop, and fix the script. How to fix it |
EVALEVALSHAEVAL_ |
ERR SELECT is not allowed in cluster mode |
In cluster mode there's only database 0, so SELECT accepts only 0. Remove the SELECT call, or set the database to 0 in your client's connection settings. |
SELECT |
ERR SHUTDOWN without NOW or ABORT isn't allowed for DENY BLOCKING client |
A module called SHUTDOWN from inside its own code, where the call can't wait for replicas to catch up. The module must pass NOW, which skips the wait, or ABORT. |
SHUTDOWN |
ERR size must be positive |
You ran ARRING with a ring size of 0 or less. Pass the number of slots that the ring buffer keeps, which must be 1 or more. |
ARRING |
ERR Slot <slot> is already busy |
CLUSTER ADDSLOTS or CLUSTER ADDSLOTSRANGE tried to assign the slot in the message, but a node already serves it. Leave out slots that are already assigned, or move them with CLUSTER SETSLOT or CLUSTER MIGRATION IMPORT. |
CLUSTER SYNCSLOTS |
ERR Slot <slot> is already unassigned |
CLUSTER DELSLOTS or CLUSTER DELSLOTSRANGE tried to unassign the slot in the message, but no node serves it. Leave that slot out of the command. |
CLUSTER SYNCSLOTS |
ERR Slot <slot> is currently in an active atomic slot migration. CLUSTER SETSLOT cannot be used at this time. To perform a legacy slot migration instead, first cancel the ongoing task with CLUSTER MIGRATION CANCEL |
An atomic slot migration is moving the slot in the message, so CLUSTER SETSLOT can't change it now. Wait for the migration to finish, or cancel it with CLUSTER MIGRATION CANCEL if you want to move the slot the legacy way. |
CLUSTER SETSLOT |
ERR slot <slot> not handled by this node |
The slot in the message isn't served by the node you sent HOTKEYS START to. Send the command to the primary that serves that slot, as CLUSTER SHARDS shows, or list only this node's slots. |
HOTKEYS START |
ERR Slot <slot> specified multiple times |
The same hash slot, shown in the message, appears more than once in your slots or slot ranges, for example in two overlapping ranges. List each slot only once. | CLUSTER SYNCSLOTSCLUSTER MIGRATIONSFLUSHTRIMSLOTS |
ERR slot has no owner: <slot> |
The slot in the message isn't assigned to any node, so there's no node to import it from. Assign the slot with CLUSTER ADDSLOTS instead of migrating it. |
CLUSTER MIGRATIONCLUSTER SYNCSLOTS |
ERR slot migration not allowed on replica. |
You ran CLUSTER MIGRATION IMPORT on a replica, and only a primary can import slots. Run it on the primary that should receive the slots. |
CLUSTER MIGRATIONCLUSTER SYNCSLOTS |
ERR slot range is out of range: <start_slot>-<end_slot> |
A slot range goes past slot 16383, the last hash slot. Commands check each slot number before this point, so you usually see this only from cluster tooling that starts a slot migration. Use slots from 0 to 16383. | CLUSTER MIGRATIONCLUSTER SYNCSLOTSSFLUSHTRIMSLOTS |
ERR slots belong to different source nodes |
An import can take slots from only one source node, and the slots you listed are served by different nodes. Split the command into one CLUSTER MIGRATION IMPORT per source node, and run them one after another. |
CLUSTER MIGRATIONCLUSTER SYNCSLOTS |
ERR SLOTS count must be between 1 and 16384 |
The count after SLOTS in HOTKEYS START isn't an integer from 1 to 16384. Pass the number of slot numbers that follow it. |
HOTKEYS START |
ERR SLOTS parameter already specified |
You passed SLOTS more than once to HOTKEYS START. List all the slots after a single SLOTS and its count. |
HOTKEYS START |
ERR SLOTS parameter cannot be used in non-cluster mode |
You passed SLOTS to HOTKEYS START on a server that isn't part of a cluster, where hash slots don't apply. Remove SLOTS to track keys from the whole server. |
HOTKEYS START |
ERR source and destination objects are the same |
You called MOVE with the database you're already using as the target, or COPY with the same key name as source and destination in the same database. Choose another database for MOVE, or another destination key or DB for COPY. |
MOVECOPY |
ERR SSUBSCRIBE isn't allowed for a DENY BLOCKING client |
You sent SSUBSCRIBE inside a MULTI transaction, or from a module call, where each command must get exactly one reply. Send SSUBSCRIBE on its own from a normal client connection, outside any transaction. |
SSUBSCRIBE |
ERR start slot number <start_slot> is greater than end slot number <end_slot> |
In a slot range, the first slot must not be higher than the last one, and the message shows a range where it is. Swap the two numbers, for example 1000 2000 instead of 2000 1000. |
CLUSTER DELSLOTSRANGECLUSTER MIGRATIONCLUSTER SYNCSLOTSSFLUSHTRIMSLOTS |
ERR Start slot number <start_slot> is greater than end slot number <end_slot> |
In CLUSTER SLOT-STATS SLOTSRANGE, the start slot is higher than the end slot. Swap the two numbers so that the range goes from low to high. |
CLUSTER SLOT-STATS |
ERR STORE option in GEORADIUS is not compatible with WITHDIST, WITHHASH and WITHCOORD options |
You combined STORE or STOREDIST with WITHDIST, WITHHASH, or WITHCOORD in GEORADIUS or GEORADIUSBYMEMBER. Stored results can't include those details, so remove them, or drop STORE to get the details back. |
GEORADIUSGEORADIUSBYMEMBER |
ERR string exceeds maximum allowed size (proto-max-bulk-len) |
The string that APPEND or SETRANGE would create is longer than proto-max-bulk-len, 512 MB by default. Keep values smaller or split them across keys, or raise proto-max-bulk-len if you need larger strings. |
APPENDSETRANGE |
ERR String too long for LCS |
One of the strings you passed to LCS is about 4 GB or longer, more than LCS can handle. Compare shorter strings. |
LCS |
ERR SUBSCRIBE isn't allowed for a DENY BLOCKING client |
SUBSCRIBE came from a connection that must get exactly one reply per command, such as a module calling Redis, so it can't enter Pub/Sub mode. Send SUBSCRIBE from a normal client connection instead. |
SUBSCRIBE |
ERR SWAPDB is not allowed in cluster mode |
In cluster mode there's only database 0, so SWAPDB has nothing to swap. Remove the call. |
SWAPDB |
ERR syntax error |
Redis couldn't make sense of the command's options. An option is misspelled, in the wrong place, missing its value, or combined with one it can't be used with, such as NX with XX. Compare each option with the command's syntax. How to fix it |
AUTHBITOPBITCOUNTand 98 moreBITPOSBITFIELDBITFIELD_RESTOREMIGRATECLUSTER SYNCSLOTSCLUSTER FAILOVERCLUSTER RESETCLUSTER SLOT-STATSCONFIG SETFLUSHALLFLUSHDBHSCANSCANSSCANZSCANSHUTDOWNCOPYGEOADDGEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_GEORADIUS_GEOSEARCHGEOSEARCHSTOREGEODISTHOTKEYS STARTCLIENT LISTCLIENT REPLYCLIENT NO-EVICTCLIENT KILLCLIENT TRACKINGCLIENT CACHINGCLIENT NO-TOUCHMEMORY USAGEBGSAVEFAILOVERCOMMAND LISTSORTSORT_ARSCANARGREPARLASTITEMSARINFOHRANDFIELDLINSERTLPOSBLMOVEBLMOVEMBLMPOPLMOVELMOVEMLMPOPSPOPSRANDMEMBERSINTERCARDSUNIONCARDSDIFFCARDXADDXTRIMXACKDELXDELEXXRANGEXREVRANGEXREADXREADGROUPXSETIDXPENDINGXAUTOCLAIMXCFGSETGETEXMSETEXSETINCREXLCSZADDZINCRBYZDIFFZDIFFSTOREZINTERZINTERCARDZINTERSTOREZUNIONZUNIONSTOREZRANGEZRANGEBYLEXZRANGEBYSCOREZRANGESTOREZREVRANGEZREVRANGEBYLEXZREVRANGEBYSCOREZRANKZREVRANKZPOPMAXZPOPMINZRANDMEMBERBZMPOPZMPOP |
ERR Syntax error in HELLO option '<option>' |
HELLO got an option it doesn't understand, shown in the message, or an option without all its values. The options are SETNAME with a name, and AUTH with both a user name and a password; use default as the user name for a plain password. How to fix it |
HELLO |
ERR syntax error, expected IDS keyword |
You ran XNACK without the IDS block. Add IDS, the number of IDs, and the entry IDs after the mode. How to fix it |
XNACK |
ERR syntax error, IDMP requires a non-empty idempotent ID |
You passed XADD the IDMP option with an empty idempotent ID, the second value after IDMP. Pass a non-empty string that identifies this message, so that Redis can recognize a repeated XADD. How to fix it |
XADDXTRIM |
ERR syntax error, IDMP requires a non-empty producer ID |
You passed XADD the IDMP option with an empty producer ID, the first value after IDMP. Pass a non-empty string that identifies the producer. How to fix it |
XADDXTRIM |
ERR syntax error, IDMP/IDMPAUTO can be used only with auto-generated IDs |
You used IDMP or IDMPAUTO in XADD with an entry ID that you chose. Pass * as the ID so that Redis generates it; idempotent adds work only with generated IDs. How to fix it |
XADDXTRIM |
ERR syntax error, IDMP/IDMPAUTO specified multiple times |
You passed IDMP or IDMPAUTO more than once in one XADD, or passed both. Use only one of them, once. How to fix it |
XADDXTRIM |
ERR syntax error, IDMPAUTO requires a non-empty producer ID |
You passed XADD the IDMPAUTO option with an empty producer ID. Pass a non-empty string that identifies the producer; Redis computes the idempotent ID from the fields and values. How to fix it |
XADDXTRIM |
ERR syntax error, LIMIT cannot be used without specifying a trimming strategy |
You passed LIMIT without MAXLEN or MINID, so there's no trim for it to limit. Add a trimming option, for example MAXLEN ~ 1000 LIMIT 100, or remove LIMIT. How to fix it |
XADDXTRIM |
ERR syntax error, LIMIT cannot be used without the special ~ option |
You passed LIMIT with an exact trim. LIMIT only works with approximate trimming, so put ~ after MAXLEN or MINID, or remove LIMIT. How to fix it |
XADDXTRIM |
ERR syntax error, LIMIT is only supported in combination with either BYSCORE or BYLEX |
You passed LIMIT to a range by index. LIMIT only works with BYSCORE or BYLEX; for an index range, choose the start and stop indexes instead. How to fix it |
ZRANGEZRANGEBYLEXZRANGEBYSCORE |
ERR syntax error, MAXLEN and MINID options at the same time are not compatible |
You passed both MAXLEN and MINID, or one of them twice. Choose one trimming strategy: MAXLEN keeps a number of entries, and MINID removes entries with IDs lower than the one you pass. How to fix it |
XADDXTRIM |
ERR syntax error, WITHSCORES not supported in combination with BYLEX |
You asked for WITHSCORES in a lexicographic range. BYLEX ranges expect all members to have the same score, so leave out WITHSCORES, or read scores with ZSCORE or ZMSCORE. How to fix it |
ZRANGEZRANGEBYLEXZRANGEBYSCORE |
ERR syntax error, XTRIM must be called with a trimming strategy |
You ran XTRIM without MAXLEN or MINID. Add one of them with its threshold, for example XTRIM key MAXLEN 1000. How to fix it |
XTRIM |
ERR Target instance replied with error: <error> |
MIGRATE reached the target server, but the target replied with the error after the colon. A common one is BUSYKEY, when the key already exists there and you didn't pass REPLACE. Others are wrong AUTH details or a database number that doesn't exist. |
MIGRATE |
ERR Target node is not a master |
CLUSTER SETSLOT names a node that's a replica, and only primaries can serve slots or move them. Pass the ID of a primary, as shown by CLUSTER NODES. |
CLUSTER SETSLOT |
ERR The $ ID is meaningless in the context of XREADGROUP: you want to read the history of this consumer by specifying a proper ID, or use the > ID to get new messages. The $ ID would just return an empty result set. |
You passed $ as an ID to XREADGROUP, but $ only works with XREAD. Use > to get messages that the group hasn't delivered yet, or an ID such as 0 to reread this consumer's pending messages. |
XREADGROUP |
ERR The 'default' user cannot be removed |
ACL DELUSER can't delete the default user, and none of the users in the command were deleted. Remove default from the list. To stop clients from using it, give it a password or disable it with ACL SETUSER. |
ACL DELUSER |
ERR The + ID is meaningless in the context of XREADGROUP: you want to read the history of this consumer by specifying a proper ID, or use the > ID to get new messages. The + ID would just return an empty result set. |
You passed + as an ID to XREADGROUP, but + only works with XREAD. Use > to get messages that the group hasn't delivered yet, or an ID such as 0 to reread this consumer's pending messages. |
XREADGROUP |
ERR The > ID can be specified only when calling XREADGROUP using the GROUP <group> <consumer> option. |
You passed > as an ID to XREAD, but > means messages not yet delivered to a consumer group, so it only works with XREADGROUP. With XREAD, use $ for new entries only, or an ID to read the entries after it. |
XREAD |
ERR The `numfields` parameter must match the number of arguments |
The number after FIELDS doesn't match the number of field names that follow it. Make the count equal to the number of fields you list. |
HGETDELHEXPIRETIMEHPEXPIRETIME |
ERR The `numids` parameter must match the number of arguments |
The number after IDS is larger than the number of IDs that follow it. Make the count equal to the number of entry IDs you list. |
XACKDELXDELEX |
ERR the ANY argument requires COUNT argument |
You passed ANY to a geospatial search without COUNT. ANY stops the search as soon as it has found enough matches, so it needs COUNT to say how many, as in COUNT 10 ANY. |
GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR The bit argument must be 1 or 0. |
BITPOS looks for the first bit with a given value, so the bit argument must be 0 or 1. Pass 1 to find the first set bit, or 0 to find the first clear bit. |
BITPOS |
ERR The CLAIM option is only supported by XREADGROUP. You called XREAD instead. |
You passed CLAIM to XREAD, but claiming pending entries needs a consumer group, so only XREADGROUP supports it. Use XREADGROUP with GROUP, or remove CLAIM. |
XREADXREADGROUP |
ERR The client ID you want redirect to does not exist |
No open connection has the client ID you passed after REDIRECT in CLIENT TRACKING. Get the ID with CLIENT ID on the connection that should receive the invalidation messages, and check that it's still open. |
CLIENT TRACKING |
ERR The command has no key arguments |
You passed COMMAND GETKEYS or COMMAND GETKEYSANDFLAGS a command that never takes keys, such as PING. There are no keys to find, so you don't need to ask for this command. |
COMMAND GETKEYSCOMMAND GETKEYSANDFLAGS |
ERR The entries_added specified in XSETID is smaller than the target stream length |
In XSETID, the ENTRIESADDED value is smaller than the number of entries now in the stream. Pass a count at least as large as the stream's length, which XLEN returns. |
XSETID |
ERR The GROUP option is only supported by XREADGROUP. You called XREAD instead. |
You passed GROUP to XREAD. To read as a member of a consumer group, call XREADGROUP with the same arguments instead. |
XREADXREADGROUP |
ERR The ID specified in XADD is equal or smaller than the target stream top item |
The entry ID you passed to XADD isn't greater than the last ID the stream used, even if that entry was deleted, and stream IDs must always increase. Use * to let Redis generate the ID, or pass a larger ID. |
XADD |
ERR The ID specified in XADD must be greater than 0-0 |
You passed 0-0 as the entry ID to XADD, but the smallest valid ID is 0-1. Use * to let Redis generate the ID, or pass a larger one. |
XADD |
ERR The ID specified in XSETID is smaller than current max_deleted_entry_id |
XSETID would set the stream's last ID lower than the largest ID already deleted from it. Pass an ID at least as large as the max-deleted-entry-id that XINFO STREAM shows. |
XSETID |
ERR The ID specified in XSETID is smaller than the provided max_deleted_entry_id |
In XSETID, the ID you passed is smaller than the MAXDELETEDID you passed with it, but the last ID can't be lower than the largest deleted ID. Raise the ID or lower MAXDELETEDID. |
XSETID |
ERR The ID specified in XSETID is smaller than the target stream top item |
XSETID would set the stream's last ID lower than the ID of its newest entry. Pass an ID at least as large as the last entry's ID, which XINFO STREAM shows. |
XSETID |
ERR The LIMIT argument must be >= 0. |
You passed XADD or XTRIM a negative LIMIT. Pass 0 or more; LIMIT caps how many entries an approximate trim, with ~, removes. |
XADDXTRIM |
ERR The MAXLEN argument must be >= 0. |
You passed XADD or XTRIM a negative MAXLEN. Pass the number of entries to keep, 0 or more. |
XADDXTRIM |
ERR The NOACK option is only supported by XREADGROUP. You called XREAD instead. |
You passed NOACK to XREAD, but only consumer groups track acknowledgments, so only XREADGROUP supports it. Remove NOACK, or read with XREADGROUP. |
XREADXREADGROUP |
ERR The server is running without a config file |
CONFIG REWRITE saves settings to the configuration file that the server started with, and this server started without one. Start Redis with the path of a configuration file to use this command. |
CONFIG REWRITE |
ERR the slot <slot> is served by this node |
TRIMSLOTS deletes the keys of slots that a primary no longer serves, and the slot in the message is still served by this node. Check the slot's owner with CLUSTER SHARDS. Nodes normally send this command themselves after a migration. |
TRIMSLOTS |
ERR The specified keys must contain string values |
One of the keys you passed to LCS holds a value that isn't a string, such as a list or a hash. Pass two keys that hold strings; a key that doesn't exist counts as an empty string. |
LCS |
ERR The specified node is not a master |
CLUSTER REPLICAS takes the node ID of a primary, and the node you passed is a replica. Pass the ID of its primary instead, which CLUSTER NODES shows. |
CLUSTER REPLICAS |
ERR The stream has exhausted the last possible ID, unable to add more items |
The stream's last ID is already the largest possible, 18446744073709551615-18446744073709551615, so XADD can't create a newer one. This follows an XADD or XSETID with a huge ID; delete the stream and recreate it with normal IDs. |
XADD |
ERR The user can assign a config epoch only when the node does not know any other node. |
CLUSTER SET-CONFIG-EPOCH works only before the node has met any other node. While you create the cluster, run it on each node before CLUSTER MEET. |
CLUSTER SET-CONFIG-EPOCH |
ERR The XGROUP subcommand requires the key to exist. Note that for CREATE you may want to use the MKSTREAM option to create an empty stream automatically. |
The stream key you passed to XGROUP doesn't exist. Create the stream first, or add the MKSTREAM option to XGROUP CREATE so that it creates an empty stream. How to fix it |
XGROUP CREATEXGROUP CREATECONSUMERXGROUP DELCONSUMER |
ERR There is a pending trim job for slot <slot>. Most probably, this is due to a failed atomic slot migration. CLUSTER SETSLOT cannot be used at this time. Please retry later once the trim job is completed. |
This node is still deleting keys of the slot in the message, usually left over from a failed atomic slot migration, so CLUSTER SETSLOT can't change the slot now. Wait for the deletion to finish, then retry. |
CLUSTER SETSLOT |
ERR There was an error trying to save the ACLs. Please check the server logs for more information |
ACL SAVE couldn't write the access control list (ACL) file set by aclfile, for example because its directory isn't writable or the disk is full. The server log has the exact reason. The users in memory are unchanged. |
ACL SAVE |
ERR This instance has cluster support disabled |
You ran a cluster command, such as CLUSTER INFO, READONLY, or ASKING, on a server that isn't running in cluster mode. Connect to a cluster node instead, or start this server with cluster-enabled yes if you're building a cluster. |
Cluster commands |
ERR this node is already the owner of the slot range |
You asked this node to import slots that it already serves. Run CLUSTER MIGRATION IMPORT on the node that should receive the slots. |
CLUSTER MIGRATION |
ERR This node is not the owner of the slots |
The importing node asked this node for slots that this node doesn't serve. This usually means the nodes don't agree yet on who owns the slots. Wait for the cluster configuration to settle, check the owner with CLUSTER SHARDS, and import again. |
CLUSTER SYNCSLOTS |
ERR This Redis command is not allowed from script script: <script>, on <source>:<line>. |
Your script or function called a command that can't run inside scripts, such as SUBSCRIBE, MULTI, WATCH, EVAL, or FUNCTION LOAD. Run that command from your client instead. |
EVALEVALSHAEVAL_ |
ERR This Redis instance is not configured to use an ACL file. You may want to specify users via the ACL SETUSER command and then issue a CONFIG REWRITE (assuming you have a Redis configuration file set) in order to store users in the Redis configuration. |
ACL LOAD and ACL SAVE work only when the server was started with the aclfile setting, and this one wasn't. Set aclfile in the configuration file and restart, or keep users in the configuration file with CONFIG REWRITE. |
ACL SAVE |
ERR timeout is negative |
The timeout you passed is negative. Pass 0 or more; for blocking commands, 0 means wait with no time limit. | BLMOVEBLMOVEMBLMPOP |
ERR timeout is not a float or out of range |
The timeout you passed to a blocking list or sorted set command isn't a number. Pass it in seconds, as a decimal such as 0.5 if you need to, or 0 to wait with no time limit. |
BLMOVEBLMOVEMBLMPOP |
ERR timeout is not an integer or out of range |
The timeout you passed isn't a whole number. XREAD and XREADGROUP with BLOCK, WAIT, WAITAOF and CLIENT PAUSE take the timeout in milliseconds, as an integer such as 1500. |
BLMOVEBLMOVEMBLMPOP |
ERR timeout is out of range |
The timeout is so large that adding it to the current time would overflow. BLPOP and the other blocking list and sorted set commands take seconds, while XREAD, WAIT, WAITAOF, and CLIENT PAUSE take milliseconds; pass a smaller value, or 0 to make a blocking command wait forever. |
BLMOVEBLMOVEMBLMPOP |
ERR To set a master the node must be empty and without assigned slots. |
A primary can become a replica only when it has no hash slots and no keys. Move its slots to other nodes and delete its keys, for example with FLUSHALL, then run CLUSTER REPLICATE again. |
CLUSTER REPLICATE |
ERR too many predicates, maximum is 250 |
You passed ARGREP more than 250 predicates (EXACT, MATCH, GLOB or RE). Combine conditions into fewer predicates, for example one regular expression, or split the search into several calls. |
ARGREP |
ERR Trim is disabled by module |
A module on this node has paused the deletion of migrated keys, so the node won't start a new slot migration. For example, Redis Search does this for a short time after a migration while indexes exist. Wait, then start the import again. | CLUSTER SYNCSLOTS |
ERR Trim job in progress for the slots |
This node is still deleting the keys of some of the requested slots, so it can't send those slots yet. Wait for the deletion to finish, then start the import again. | CLUSTER SYNCSLOTS |
ERR UBOUND is not a valid float |
With BYFLOAT, INCREX reads UBOUND as a decimal number, and the value you passed isn't one. Pass a number such as 100 or 99.5. |
INCREX |
ERR UBOUND is not an integer or out of range |
Without BYFLOAT, INCREX reads UBOUND as a 64-bit integer, and the value you passed isn't one. Pass a whole number, or add BYFLOAT to use decimal bounds. |
INCREX |
ERR Unbalanced 'xread' list of streams: for each stream key an ID, '+', or '$' must be specified. |
After STREAMS, XREAD needs all the keys and then one ID for each key, so the number of arguments after STREAMS must be even. Add the missing IDs, using $ to read only new entries, or remove the stray argument. |
XREAD |
ERR Unbalanced 'xreadgroup' list of streams: for each stream key an ID or '>' must be specified. |
After STREAMS, XREADGROUP needs all the keys and then one ID for each key, so the number of arguments after STREAMS must be even. Add the missing IDs, using > for new messages, or remove the stray argument. |
XREADGROUP |
ERR Unexpected engine in script shebang: <engine> |
The first line of your script names an engine other than Lua, shown in the message. EVAL and SCRIPT LOAD accept only #!lua, in lowercase and with no space after #!. |
EVALEVAL_SCRIPT LOAD |
ERR Unexpected flag in script shebang: <flag> |
A flag in the flags= list of your script's shebang line isn't one Redis knows, as the message shows. Valid flags are no-writes, allow-oom, allow-stale, no-cluster, and allow-cross-slot-keys, in lowercase and separated by commas without spaces. |
EVALEVAL_SCRIPT LOAD |
ERR unknown argument |
CLUSTER MIGRATION didn't recognize an argument. The subcommands are IMPORT, STATUS, and CANCEL, and STATUS and CANCEL take either ID followed by a task ID, or ALL. |
CLUSTER MIGRATION |
ERR Unknown argument <argument> |
FUNCTION LIST got the argument in the message, but it accepts only WITHCODE and LIBRARYNAME followed by a pattern, each at most once. Remove the unknown or repeated argument. |
FUNCTION LIST |
ERR unknown argument: <argument> |
The command got an argument it doesn't recognize, shown in the message. Check the option names, and check that the number after FIELDS matches the fields you list, because extra fields are read as options. |
HGETEXHSETEXHEXPIRE |
ERR Unknown category '<category>' |
ACL CAT doesn't know the category in the message. Run ACL CAT with no argument to list the valid categories, and pass the name without the @ sign. |
ACL CAT |
ERR Unknown client type '<type>' |
The client type you passed to CLIENT LIST TYPE or CLIENT KILL TYPE isn't one Redis knows. Use normal, master, replica (or slave), or pubsub. |
CLIENT LISTCLIENT KILL |
ERR unknown command '<command>' |
This server doesn't know the command named in the message. Check the spelling, that your Redis version has the command, that the module that adds it is loaded, and that it isn't renamed or disabled with rename-command. How to fix it |
Any command |
ERR unknown command '<command>', with args beginning with: <args> |
This server doesn't know the command named in the message; the message also shows the first arguments to help you find the call. Check the spelling, that your Redis version has the command, and that the module that adds it is loaded. How to fix it | Any command |
ERR Unknown Error for creating instances. |
Sentinel failed to add the primary in SENTINEL MONITOR for a reason it doesn't recognize. The known causes have their own messages, so this is unexpected; check the Sentinel log and the arguments, and try again. |
SENTINEL MONITOR |
ERR Unknown georadius search type |
A geospatial search command reached Redis with an internal search type that Redis doesn't recognize. No arguments that you pass can cause this, so report it as a bug. | GEORADIUSGEORADIUSBYMEMBERGEORADIUSBYMEMBER_ |
ERR Unknown lua shebang option: <option> |
The shebang line of your script has an option other than flags=, the only option scripts accept. A space inside the flags list causes this too, as does name=, which only function libraries use; write flags as flags=no-writes,allow-oom. |
EVALEVAL_SCRIPT LOAD |
ERR Unknown node <node_id> |
This node doesn't know a node with the ID in the message. Check the ID with CLUSTER NODES on this node. IDs are 40 characters long, and a node that joined recently may not be known yet. |
CLUSTER REPLICASCLUSTER SETSLOTCLUSTER FORGETCLUSTER REPLICATECLUSTER COUNT-FAILURE-REPORTS |
ERR unknown operation |
You ran AROP with an operation it doesn't support. Use one of SUM, MIN, MAX, AND, OR, XOR, MATCH or USED. |
AROP |
ERR Unknown option <option> |
A CLUSTER SYNCSLOTS CONF message carried an option this node doesn't know. Nodes send this message to each other during an atomic slot migration, so this usually means they run different Redis versions. Upgrade all nodes to the same version. |
CLUSTER SYNCSLOTS |
ERR Unknown option given: <option> |
FUNCTION LOAD got an option it doesn't know before the library code; REPLACE is its only option. This also happens when the code is split across several arguments, so pass the whole library as one quoted argument. |
FUNCTION LOAD |
ERR Unknown option or number of arguments for CONFIG SET - '<parameter>' |
CONFIG SET doesn't know the parameter in the message. Check the spelling with CONFIG GET, and for a module setting, check that the module is loaded. |
CONFIG SET |
ERR Unknown option or number of arguments for SENTINEL SET '<option>' |
You ran SENTINEL SET with an option it doesn't know, or without the value it needs, such as a last option with no value or rename-command with one name. Check the option and its value. Options before it in the same command were already applied. |
SENTINEL SET |
ERR Unknown Redis command called from script script: <script>, on <source>:<line>. |
Your script or function called redis.call or redis.pcall with a command name that doesn't exist, often a typo or a command from a module that isn't loaded. Pass a subcommand as a separate argument, as in redis.call('CONFIG', 'GET', 'maxmemory'). |
EVALEVALSHAEVAL_ |
ERR unknown subcommand '<subcommand>'. Try <command> HELP. |
The command named in the message doesn't have the subcommand you passed. Run the command followed by HELP, for example CLIENT HELP, to list its subcommands, and check that your Redis version has the one you want. How to fix it |
Commands with subcommands |
ERR unknown subcommand or wrong number of arguments |
HOTKEYS got a subcommand it doesn't know, or the wrong number of arguments for one. The subcommands are START, STOP, GET, RESET, and HELP. How to fix it |
HOTKEYS GETHOTKEYS HELPHOTKEYS RESETHOTKEYS STARTHOTKEYS STOP |
ERR unknown subcommand or wrong number of arguments for '<subcommand>'. Try <command> HELP. |
You called a command that has subcommands, such as CONFIG or XINFO, with a subcommand it doesn't have, or with the wrong number of arguments for that subcommand. Run the HELP subcommand named in the message to list the valid forms. How to fix it |
Commands with subcommands |
ERR unknown type object |
COPY found a key whose data type it doesn't know how to duplicate. Every built-in and module type is handled, so this points to an internal problem; report it as a bug, with the key's TYPE and OBJECT ENCODING. |
COPY |
ERR Unmatched parenthesis in acl selector starting at '<argument>'. |
A selector in your ACL SETUSER rules starts with ( but is never closed with ). The message shows the argument where the selector starts. Close the selector, for example (~app:* +get). |
ACL SETUSER |
ERR Unrecognized option '<option>' |
CLIENT SETINFO only accepts the lib-name and lib-ver options, and got the option in the message. Use one of those two, which client libraries set to report their name and version. |
CLIENT SETINFO |
ERR Unrecognized sort metric for ORDERBY. |
CLUSTER SLOT-STATS ORDERBY got a metric it doesn't know, or one that isn't turned on. key-count always works, but cpu-usec, network-bytes-in, network-bytes-out, and memory-bytes need the matching cluster-slot-stats-enabled setting. |
CLUSTER SLOT-STATS |
ERR Unrecognized XCLAIM option '<option>' |
XCLAIM didn't recognize the argument shown in the message. It also reads invalid entry IDs as options, so check both the IDs and the option names: IDLE, TIME, RETRYCOUNT, FORCE, JUSTID and LASTID. |
XCLAIM |
ERR Unrecognized XNACK option '<option>' |
XNACK didn't recognize the argument shown in the message. Use only IDS, RETRYCOUNT and FORCE, and check that the number after IDS matches the IDs you list, because extra IDs are read as options. |
XNACK |
ERR Unsupported option <option> |
An expire command got an argument after the time that isn't NX, XX, GT, or LT, shown in the message. Remove it, and check that you didn't add the time unit as a separate word, as in EXPIRE key 10 seconds. |
EXPIREEXPIREATPEXPIREPEXPIREAT |
ERR unsupported unit provided. please use M, KM, FT, MI |
The unit isn't one of m (meters), km (kilometers), ft (feet), or mi (miles), in any case. Pass one of these as a separate argument after the distance. |
GEODISTGEORADIUSGEORADIUSBYMEMBER |
ERR Use SCRIPT DEBUG YES/SYNC/NO |
You passed SCRIPT DEBUG a mode other than YES, SYNC, or NO. YES debugs in a forked copy of the server, SYNC debugs in the server itself and blocks it meanwhile, and NO turns debugging off. |
SCRIPT DEBUG |
ERR User '<username>' not found |
ACL DRYRUN doesn't know the user in the message. Check the name with ACL USERS. Usernames are case-sensitive. |
ACL DRYRUN |
ERR user_script:<line>: Script attempted to access nonexistent global variable '<name>' script: <script>, on <source>:<line>. |
Your script or function read a global variable that doesn't exist, named in the message, often because of a typo, a missing local, or a library that Redis doesn't load, such as io. Declare your variables with local, and pass data in as keys and arguments. |
EVALEVALSHAEVAL_ |
ERR Usernames can't contain spaces or null characters |
The username you passed to ACL SETUSER contains a space, another whitespace character, or a null character, which usernames can't have. Choose a name without them. |
ACL SETUSER |
ERR value cannot be Infinity |
The key's current value is infinity, for example stored as inf, so INCREX with BYFLOAT can't add to it. Set the key to a finite number first. |
INCREX |
ERR value count does not match fieldset field count |
HIMPORT SET got a different number of values than the fieldset has fields. Pass one value for each field, in the order you listed the fields in HIMPORT PREPARE. |
HIMPORT SET |
ERR value for ENTRIESREAD must be positive or -1 |
You passed XGROUP CREATE or XGROUP SETID an ENTRIESREAD lower than -1. Pass the number of entries the group has read, 0 or more, or -1 if you don't know it. |
XGROUP CREATEXGROUP CREATECONSUMERXGROUP DELCONSUMER |
ERR value is NaN or Infinity |
You passed HINCRBYFLOAT an increment of infinity, such as inf. Pass a finite number. |
HINCRBYFLOAT |
ERR value is not a valid float |
An argument that must be a number, such as a score, coordinate, or increment, isn't one; for INCRBYFLOAT, the value already in the key can be the problem. Write the number with digits, a dot, and an optional exponent, such as 3.5 or 1e3, without units or commas. How to fix it |
GEOADDGEORADIUSGEORADIUSBYMEMBER |
ERR value is not an integer or out of range |
An argument that must be a whole number isn't one, or it's outside the signed 64-bit range; for commands such as INCR, the value already in the key can be the problem. Write the number with digits only, without decimals or units, such as 10 or -3. How to fix it |
Commands with number arguments |
ERR value is out of range |
You called HRANDFIELD with WITHVALUES, or ZRANDMEMBER with WITHSCORES, and a count whose absolute value is larger than 4611686018427387903. Pass a smaller count. |
Commands with number arguments |
ERR value is out of range, must be positive |
An argument that must be a count of 0 or more is negative or isn't an integer, such as the count of LPOP, RPOP, SPOP, ZPOPMIN, or ZPOPMAX, or the numreplicas argument of WAITAOF. Despite the message, 0 is accepted. |
LPOPLPOSRPOP |
ERR value is out of range, value must between <min> and <max> |
An integer argument is outside the range it accepts, and the message gives the smallest and largest allowed values. For example, the numlocal argument of WAITAOF must be 0 or 1, and a database number for SELECT, MOVE, or COPY must fit in 32 bits. |
Commands with number arguments |
ERR WAIT cannot be used with replica instances. Please also note that since Redis 4.0 if a replica is configured to be writable (which is not the default) writes to replicas are just local and are not propagated. |
You sent WAIT to a replica, but it only works on a primary, where it waits for replicas to acknowledge your writes. Send your writes and WAIT to the primary. |
WAIT |
ERR WAITAOF cannot be used when numlocal is set but appendonly is disabled. |
You asked WAITAOF to wait for the local append-only file (AOF), with numlocal set to 1, but appendonly is off. Turn on appendonly, or pass 0 as numlocal to wait only for replicas. |
WAITAOF |
ERR WAITAOF cannot be used with replica instances. Please also note that writes to replicas are just local and are not propagated. |
You sent WAITAOF to a replica, but it only works on a primary. Send your writes and WAITAOF to the primary instead. |
WAITAOF |
ERR WARNING: Duplicate user '<username>' found on line <line>. |
The access control list (ACL) file defines the same user twice, the second time on the line in the message. Despite the WARNING label, this is an error, and ACL LOAD changed nothing. Remove or merge the duplicate line. |
ACL LOAD |
ERR WATCH inside MULTI is not allowed |
You sent WATCH after MULTI, but keys must be watched before the transaction starts. The transaction stays open; to watch keys, end it with DISCARD, then send WATCH before MULTI. |
WATCH |
ERR weight value is not a float |
A value after WEIGHTS isn't a number. Pass one number for each input key, in the same order as the keys. |
ZDIFFZDIFFSTOREZINTER |
ERR When using MIGRATE KEYS option, the key argument must be set to the empty string |
With the KEYS option, MIGRATE takes its keys from the end of the command, so the single key argument must be empty. Pass "" in place of the key, then list the keys after KEYS. |
MIGRATE |
ERR Write commands are not allowed from read-only scripts. script: <script>, on <source>:<line>. |
Your script called a command that writes, but it runs read-only, because you called it with EVAL_RO, EVALSHA_RO, or FCALL_RO, or because it has the no-writes flag. Remove the write, or remove the flag and call it with EVAL, EVALSHA, or FCALL. |
EVALEVALSHAEVAL_ |
ERR Wrong number of args calling Redis command from script script: <script>, on <source>:<line>. |
Your script or function called a command through redis.call or redis.pcall with the wrong number of arguments for that command. Compare the call with the command's syntax, and pass each argument as a separate Lua value. |
EVALEVALSHAEVAL_ |
ERR Wrong number of args for redis.acl_check_cmd() script: <script>, on <source>:<line>. |
Your script called redis.acl_check_cmd() with a number of arguments that the named command doesn't accept. Pass the command with the full list of arguments you want to check, as you would pass them to redis.call(). |
EVALEVALSHAEVAL_ |
ERR wrong number of arguments |
The number after FIELDS is larger than the number of fields, or field and value pairs for HSETEX, that follow it. Make the count match what you list. How to fix it |
HGETEXHSETEXHEXPIRE |
ERR wrong number of arguments for '<command>' command |
The command named in the message got more or fewer arguments than it accepts. Compare your call with the command's syntax, and check for an empty list of keys or fields, or a value with spaces that wasn't quoted. How to fix it | Any command |
ERR wrong number of arguments for 'hotkeys|get' command |
You passed arguments to HOTKEYS GET, which takes none. Run HOTKEYS GET on its own to get the results of the current or last tracking session. How to fix it |
HOTKEYS GET |
ERR wrong number of arguments for 'hotkeys|reset' command |
You passed arguments to HOTKEYS RESET, which takes none. Run HOTKEYS RESET on its own, after HOTKEYS STOP, to free the tracking results. How to fix it |
HOTKEYS RESET |
ERR wrong number of arguments for 'hotkeys|stop' command |
You passed arguments to HOTKEYS STOP, which takes none. Run HOTKEYS STOP on its own to end the tracking session. How to fix it |
HOTKEYS STOP |
ERR wrong number of arguments script: <script>, on <source>:<line>. |
Your script called redis.sha1hex() with no argument or with more than one. Pass exactly one string, the value to hash. How to fix it |
EVALEVALSHAEVAL_ |
ERR wrong number of key-value pairs |
The number of keys you passed to MSETEX is larger than the number of key and value pairs that follow it. Make the count match the pairs, and check for a missing value. |
MSETEX |
ERR wrong number or type of arguments |
Your script called redis.error_reply() or redis.status_reply() with no argument, more than one, or a value that isn't a string, such as a number. Pass exactly one string, for example redis.error_reply('ERR invalid input'). |
EVALEVALSHAEVAL_ |
ERR Wrong restore policy given, value should be either FLUSH, APPEND or REPLACE. |
You passed FUNCTION RESTORE a policy other than FLUSH, APPEND, or REPLACE. APPEND, the default, fails on name conflicts, REPLACE overwrites libraries with the same name, and FLUSH deletes all libraries first. |
FUNCTION RESTORE |
ERR XX and NX options at the same time are not compatible |
You passed both XX and NX to ZADD. Use NX to only add new members, or XX to only update existing ones. |
ZADDZINCRBY |
ERR You can't specify both OPTIN mode and OPTOUT mode |
You passed both OPTIN and OPTOUT to CLIENT TRACKING. Choose one: OPTIN tracks only the reads after CLIENT CACHING YES, and OPTOUT tracks all reads except those after CLIENT CACHING NO. |
CLIENT TRACKING |
ERR You can't switch BCAST mode on/off before disabling tracking for this client, and then re-enabling it with a different mode. |
Tracking is already on for this connection, and you tried to turn BCAST on or off with another CLIENT TRACKING ON. Run CLIENT TRACKING OFF first, then turn tracking on again with the new mode. |
CLIENT TRACKING |
ERR You can't switch OPTIN/OPTOUT mode before disabling tracking for this client, and then re-enabling it with a different mode. |
Tracking is already on in OPTIN or OPTOUT mode, and you tried to switch to the other mode. Run CLIENT TRACKING OFF first, then turn tracking on again with the new mode. |
CLIENT TRACKING |
ERR You should send CLUSTER FAILOVER to a replica |
CLUSTER FAILOVER promotes the replica that receives it, and this node is already a primary. Send the command to one of its replicas instead. |
CLUSTER FAILOVER |