Redis Error Guide: 'ERR wrong number of arguments for command' — Fix Malformed Commands and Client Bugs
Fix ERR wrong number of arguments for 'set' command in Redis: diagnose missing arguments, unquoted spaces, wrong arity, and client-library serialization bugs.
- #redis
- #troubleshooting
- #errors
- #commands
Stuck on this Redis error? Get the free incident triage checklist
A one-page PDF — the exact steps to isolate, fix, and verify a production error like this one. No spam, unsubscribe anytime.
Overview
Redis returns wrong number of arguments when a command is sent with fewer or more arguments than its defined arity. Every Redis command declares how many arguments it expects; SET needs at least a key and a value, HSET needs a key plus field/value pairs. If the count is off, the parser rejects the command before it runs.
The literal error clients receive:
(error) ERR wrong number of arguments for 'set' command
The command name in the message tells you which call was malformed. This is almost never a Redis bug — it is a missing argument, an unquoted value that contained a space, or a client library that serialized the command incorrectly.
Symptoms
- A specific command consistently fails with
wrong number of arguments, while others succeed. - The error names the command (
'set','hset','zadd','expire'). - Often appears only for values that contain spaces, or after a client-library upgrade.
redis-cli SET greeting hello world
(error) ERR wrong number of arguments for 'set' command
SET saw four arguments (SET greeting hello world) and treated world as an unexpected extra.
Common Root Causes
1. Unquoted value containing spaces
The shell (or a naive client) split a multi-word value into several arguments.
redis-cli SET greeting hello world # fails
redis-cli SET greeting "hello world" # works
2. A required argument is missing
SETEX, HSET, ZADD, and EXPIRE all need paired or minimum arguments.
redis-cli SETEX mykey 60 # missing the value
(error) ERR wrong number of arguments for 'setex' command
3. Client library built the command array wrong
An ORM/wrapper interpolated a nil/empty variable, dropping an argument, or passed an array where the client flattened it incorrectly.
4. Odd number of field/value pairs
HSET, MSET, and ZADD expect pairs; an odd count trips the arity check.
redis-cli HSET user:1 name alice age # 'age' has no value
How to diagnose
Step 1: Reproduce the exact command with redis-cli
Run the failing command verbatim in redis-cli. If it works there, the bug is in how your client serializes it.
redis-cli SET greeting "hello world"
Step 2: Check the command’s expected arity
redis-cli COMMAND INFO set
1) 1) "set"
2) (integer) -3 # negative = "at least 3 total tokens"
...
A negative arity means “at least N”; a positive one means “exactly N” (including the command name itself).
Step 3: Count what your client actually sent
Enable the monitor stream to see the real wire command (never leave MONITOR running in production — it is a debugging tool only).
redis-cli MONITOR
1720780000.123456 [0 127.0.0.1:54210] "SET" "greeting" "hello" "world"
Step 4: Inspect for empty/nil interpolated arguments
If a value came from a variable, log it before the call; an empty string still counts as an argument, but a dropped nil removes one.
Fixes
Quote multi-word values
redis-cli SET greeting "hello world"
Supply every required argument
redis-cli SETEX mykey 60 "cached-value"
redis-cli HSET user:1 name alice age 30
Fix client serialization
Pass arguments as a proper list to your client rather than a pre-joined string:
# Wrong: a single joined string becomes one arg or splits unexpectedly
r.execute_command("SET greeting hello world")
# Right: discrete arguments
r.set("greeting", "hello world")
Guard against empty/nil values before sending
Validate that variables are non-nil (or intentionally an empty string) before building the command.
What to watch out for
- Newer Redis versions add optional flags (
SET key val EX 60 NX GET); a typo in a flag can also surface assyntax errorrather than an arity error — check both. MONITORprints exactly what hit the server; it is invaluable here but adds load, so run it briefly and never in a hot path.- Redis 7 made some commands stricter; an app that “worked” before an upgrade may have been relying on lenient parsing.
- Values with newlines or shell metacharacters need quoting in scripts, not just spaces.
Related
- Redis Error: ‘ERR syntax error’
- Redis Error: ‘value is not an integer or out of range’
- Redis Error: ‘WRONGTYPE Operation against a key holding the wrong kind of value’
Paste the failing command into the free incident assistant, and browse more Redis guides.
Fixed it? Get 500 Redis & DevOps AI prompts — free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.
Did this fix your issue?
Get 500 Battle-Tested DevOps AI Prompts — Free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.