Using SETNX to Set a Key Only If It Does Not Exist in Redis
📖 Scenario: You are managing a Redis database for a web application that tracks user sessions. You want to ensure that a session key is only set if it does not already exist, to avoid overwriting existing sessions.
🎯 Goal: Build a Redis command sequence that uses SETNX to set a session key only if it does not already exist.
📋 What You'll Learn
Create a key named session:user123 with the value active using SETNX
Create a variable key holding the key name session:user123
Use SETNX command with the variable key and value active
Add a command to check if the key was set successfully
💡 Why This Matters
🌍 Real World
In web applications, SETNX is useful to create locks or ensure unique session keys without overwriting existing data.
💼 Career
Understanding SETNX helps in building reliable caching, locking mechanisms, and session management in backend development.
Progress0 / 4 steps
1
DATA SETUP: Create a variable for the session key
Create a variable called key and set it to the string session:user123.
Redis
Hint
Use = to assign the string 'session:user123' to the variable key.
2
CONFIGURATION: Define the value to set for the session key
Create a variable called value and set it to the string active.
Redis
Hint
Assign the string 'active' to the variable value.
3
CORE LOGIC: Use SETNX to set the key only if it does not exist
Write a Redis command using SETNX with the variable key and value to set the key only if it does not exist. Store the result in a variable called result.
Redis
Hint
Use redis_client.setnx(key, value) to attempt to set the key only if it does not exist, and save the result in result.
4
COMPLETION: Check if the key was set successfully
Add a command to check if result equals 1, which means the key was set. Store this check in a variable called was_set.
Redis
Hint
Compare result to 1 and assign the boolean result to was_set.
Practice
(1/5)
1. What does the Redis command SETNX do?
easy
A. Sets a key only if it does not already exist
B. Always sets a key, overwriting any existing value
C. Deletes a key if it exists
D. Returns the value of a key without changing it
Solution
Step 1: Understand the purpose of SETNX
SETNX stands for 'SET if Not eXists'. It sets a key only if the key does not already exist in Redis.
Step 2: Compare with other commands
Unlike SET, which always sets the key, SETNX avoids overwriting existing keys.
Final Answer:
Sets a key only if it does not already exist -> Option A
Quick Check:
SETNX = set-if-not-exists [OK]
Hint: Remember NX means 'Not eXists' for setting keys [OK]
Common Mistakes:
Thinking SETNX always overwrites keys
Confusing SETNX with GET command
Assuming SETNX deletes keys
2. Which of the following is the correct syntax to set key 'user:1' to 'Alice' only if it does not exist using SETNX?
easy
A. SETNX user:1 Alice
B. SET user:1 Alice NX
C. SETNX 'user:1' 'Alice'
D. SET user:1 Alice XX
Solution
Step 1: Recall SETNX syntax
The correct syntax is SETNX key value without quotes unless the key or value contains spaces.
Step 2: Analyze options
SETNX user:1 Alice uses correct syntax without quotes, which is valid. SETNX 'user:1' 'Alice' uses quotes which are not required in Redis CLI and may cause errors.
Final Answer:
SETNX user:1 Alice -> Option A
Quick Check:
SETNX key value is correct syntax [OK]
Hint: Use SETNX key value without quotes for simple keys [OK]
Common Mistakes:
Using SET with NX option incorrectly
Adding quotes unnecessarily in Redis CLI
Using XX option which means 'only set if exists'
3. Given the following Redis commands executed in order: SETNX lock 1 SETNX lock 2 What will be the result of the second SETNX command?
medium
A. 1
B. 2
C. 0
D. Error
Solution
Step 1: Execute first SETNX
The first command SETNX lock 1 sets the key 'lock' to '1' because it does not exist yet. It returns 1 indicating success.
Step 2: Execute second SETNX
The second command SETNX lock 2 tries to set 'lock' again, but since 'lock' already exists, it does not overwrite and returns 0.
Final Answer:
0 -> Option C
Quick Check:
SETNX returns 0 if key exists [OK]
Hint: SETNX returns 0 if key already exists [OK]
Common Mistakes:
Assuming SETNX overwrites existing keys
Expecting the second SETNX to return 1
Confusing return values with stored values
4. You run the command SETNX mykey without a value. What is the expected result?
medium
A. Returns 1 and sets mykey to NULL
B. Syntax error due to missing value
C. Sets mykey to an empty string
D. Returns 0 because key exists
Solution
Step 1: Check command syntax requirements
SETNX requires exactly two arguments: a key and a value. Omitting the value causes a syntax error.
Step 2: Analyze the command given
The command SETNX mykey has only one argument after the command name, so Redis will return a syntax error.
Final Answer:
Syntax error due to missing value -> Option B
Quick Check:
SETNX needs key and value arguments [OK]
Hint: Always provide both key and value for SETNX [OK]
Common Mistakes:
Trying to set key without value
Assuming missing value defaults to empty string
Expecting 0 return instead of error
5. You want to implement a simple lock using Redis SETNX. Which sequence correctly acquires the lock and handles the case when the lock is already held?
hard
A. Use DEL lock before SETNX to ensure lock is free
B. Use SET lock 1 NX; if returns OK, lock acquired; else delete lock
C. Use SETNX lock 1; if returns 0, overwrite lock with SET
D. Use SETNX lock 1; if returns 1, lock acquired; else wait and retry
Solution
Step 1: Understand lock acquisition with SETNX
SETNX sets the lock key only if it does not exist, returning 1 if successful, which means lock acquired.
Step 2: Handle lock already held
If SETNX returns 0, the lock exists, so the client should wait and retry later instead of overwriting or deleting the lock.
Final Answer:
Use SETNX lock 1; if returns 1, lock acquired; else wait and retry -> Option D
Quick Check:
SETNX + retry loop is standard lock pattern [OK]
Hint: SETNX returns 1 means lock acquired; else retry [OK]
Common Mistakes:
Overwriting lock without checking SETNX result
Deleting lock blindly before setting
Assuming SETNX returns OK instead of 1 or 0
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.