Fixing Redis Error: (error) ERR wrong number of arguments for 'set' command

beginner🔴 Redis2026-07-20| Redis Server (all versions), redis-cli, Node.js (ioredis/node-redis), Python (redis-py), PHP (phpredis)

Error Message

(error) ERR wrong number of arguments for 'set' command
#redis#syntax#commands#debugging#backend

The Error ScenarioYou’re running a command in the Redis CLI or through your application's driver, expecting a quick OK response. Instead, the server blocks the request with a syntax error:

(error) ERR wrong number of arguments for 'set' command

This isn't a bug in Redis. It’s a strict enforcement of command signatures. While the SET command is the most common culprit, you’ll see this same pattern with HSET, RPUSH, or ZADD if the argument count doesn't match what the server expects.

At Its Core: Why Redis Rejects the CommandRedis commands are positional. For a standard SET operation, the engine expects exactly two primary arguments: a key and a value. If you provide only one, or if you provide three without the correct optional flags, the parser fails immediately.

Where Things Usually Go Wrong- The Missing Value: You passed a key but forgot the actual data payload.- Unquoted Spaces: You tried to save a string like SET user:101 John Doe. Redis sees "John" as the value and "Doe" as a mysterious third argument.- Malformed Flags: You included EX (expiry) but forgot to provide the actual TTL integer (e.g., 3600).- Empty Variables: In your code, a variable you thought was a string turned out to be null or undefined, causing the client library to send an incomplete command.## Quick Fixes in the Redis CLI### 1. Wrap Strings with Spaces in QuotesThe Redis CLI uses spaces to delimit arguments. If your value contains a space, you must wrap it in double or single quotes so Redis treats it as a single string.

# This fails because Redis sees 4 arguments total
SET session_id_99 active user_logged_in
# Result: (error) ERR wrong number of arguments for 'set' command

# This works: Redis sees 'set', the key, and the full string value
SET session_id_99 "active user_logged_in"

2. Use the HELP UtilityIf you're juggling complex commands like XADD or ZADD, don't guess the argument count. Use the built-in help tool to see the exact signature:

HELP SET

The output shows the expected pattern: SET key value [NX|XX] [GET] [EX seconds|PX milliseconds...]. Notice that key and value are mandatory, while everything in brackets is optional but requires specific secondary values.

Fixing the Logic in Your Application### Python (redis-py)In Python, the library usually handles the argument count for you. However, logic errors can still trigger this if you pass None where a string is required.

import redis
r = redis.Redis(host='localhost', port=6379, db=0)

# Problem: Passing only one argument
# r.execute_command('SET', 'my_key') # This triggers the error

# Solution: Always provide key and value
r.set("api_status", "online")
r.set("cache_key", "data", ex=300) # 'ex' adds the EX flag and 300 value correctly

Node.js (ioredis / node-redis)Node.js developers often hit this error when dealing with asynchronous data. If a variable is undefined, the client might omit the argument entirely.

const Redis = require("ioredis");
const redis = new Redis();

const userId = "user:500";
let profileData; // This is currently undefined

// This will fail because 'profileData' disappears from the argument list
// await redis.set(userId, profileData); 

// Fix: Provide a fallback or check for existence
await redis.set(userId, profileData || "{}");

PHP (phpredis)In PHP, ensure your variables are initialized. Passing an uninitialized variable can lead to empty arguments depending on your error reporting settings.

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$key = "site_notice";
$message = get_message_from_db(); // If this returns null/false...

// ...this call might send an invalid number of arguments to the server
$redis->set($key, $message);

// Safer approach:
if ($message) {
    $redis->set($key, $message);
}

Verification StepsOnce you've adjusted your syntax, follow these steps to ensure the fix holds:

  • Manual CLI Test: Run the exact command in redis-cli. If it returns OK, the issue is definitely in your application logic, not the server configuration.- Type Check: Use TYPE your_key to ensure you aren't trying to use SET on a key that already contains a List or a Hash.- Monitor the Wire: Run MONITOR in a separate redis-cli window while your app runs. You will see the exact raw command being sent, making it obvious if an argument is missing.## SummaryThe ERR wrong number of arguments error is simply Redis telling you that the "sentence" you sent is grammatically incorrect. By quoting your strings in the CLI and validating that your application variables aren't null before calling SET, you can eliminate this error entirely. When in doubt, HELP <command> is your best friend.

Related Error Notes