Redis HSETNX in Python (Detailed Guide w/ Code Examples)

Use Case(s)

HSETNX is a command used in Redis to set a field in a hash to a value, only if the field does not already exist. This is useful when you want to ensure that a value is only set once and is not overwritten by subsequent operations.

Common use cases for HSETNX:

  1. Initialising default values for hash fields.
  2. Avoiding overwriting of existing data in concurrent environments.

Code Examples

We'll be using the redis package in Python for the examples.

Before all, install it with pip:

pip install redis

Here's a basic example:

import redis r = redis.StrictRedis(host='localhost', port=6379, db=0) # Setting a field 'field1' in hash 'hash1' to 'value1' if 'field1' does not already exist result = r.hsetnx('hash1', 'field1', 'value1') print(result) # prints '1' if field was set, '0' otherwise

In this case, HSETNX will attempt to set 'field1' in 'hash1' to 'value1'. If 'field1' already exists, the operation will not be executed and '0' will be returned. Otherwise, '1' will be returned.

Best Practices

  1. Use HSETNX sparingly as it needs to check if a field exists before setting a value, which can lead to more I/O compared to HSET which directly sets/overwrites the value.

  2. Validate the inputs to HSETNX to ensure the hash and the field are of correct types to avoid unexpected errors or behavior.

Common Mistakes

  1. Not handling the return value of HSETNX. It's important to handle the return value to ensure that the field was set correctly and handle the case where it wasn't set due to its existence already.

  2. Misunderstanding the usage. With HSETNX, the field will not be overwritten if it exists, unlike HSET which overwrites existing fields.


1. What's the difference between HSET and HSETNX?

While both commands are used to set a field in a hash, HSET will overwrite any existing value whereas HSETNX will not overwrite an existing value.

2. Does HSETNX create a new hash if it doesn't exist?

Yes, HSETNX will create a new hash if it doesn't already exist.

Was this content helpful?

Start building today

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.