Hash

HGETEX

Get hash fields with expiration support.

The HGETEX command returns the values of the specified fields and optionally sets their expiration time or TTL. This allows you to retrieve hash data while managing its lifetime in a single operation.

Arguments

keybodystrrequired

The key of the hash.

fieldsbody*List[str]required

One or more field names to get.

exbodyint

Set expiration time in seconds.

pxbodyint

Set expiration time in milliseconds.

exatbodyint

Set expiration as Unix timestamp in seconds.

pxatbodyint

Set expiration as Unix timestamp in milliseconds.

persistbodybool

Remove expiration from the hash.

Response

Optional[List[str | None]]

A list of values corresponding to the requested fields in the same order. Returns None for fields that do not exist. If the hash doesn't exist, None is returned.

With EX (seconds)
redis.hset("user:123", values={"name": "John", "email": "john@example.com"})# Get fields and set expiration to 60 secondsresult = redis.hgetex("user:123", "name", "email", ex=60)assert result == ["John", "john@example.com"]
With PX (milliseconds)
redis.hset("session:abc", values={"token": "xyz123", "user": "john"})# Get fields and set expiration to 30000 milliseconds (30 seconds)result = redis.hgetex("session:abc", "token", "user", px=30000)assert result == ["xyz123", "john"]
With EXAT (Unix timestamp in seconds)
import timeredis.hset("cache:data", "value", "cached")# Set expiration to specific timestamp (1 hour from now)future_time = int(time.time()) + 3600result = redis.hgetex("cache:data", "value", exat=future_time)assert result == ["cached"]
With PXAT (Unix timestamp in milliseconds)
import timeredis.hset("temp:data", "info", "temporary")# Set expiration to specific timestamp in millisecondsfuture_time = int(time.time() * 1000) + 60000  # 1 minute from nowresult = redis.hgetex("temp:data", "info", pxat=future_time)assert result == ["temporary"]
With PERSIST
redis.hset("user:456", "name", "Jane")redis.expire("user:456", 300)  # Set 5 minute expiration# Get fields and remove expirationresult = redis.hgetex("user:456", "name", persist=True)assert result == ["Jane"]# Verify expiration was removedttl = redis.ttl("user:456")assert ttl == -1  # No expiration
Without Options
redis.hset("data:xyz", values={"field1": "value1", "field2": "value2"})# Just get fields without changing expirationresult = redis.hgetex("data:xyz", "field1", "field2")assert result == ["value1", "value2"]
Non-existent Fields
redis.hset("user:789", "name", "Bob")# Get fields including one that doesn't existresult = redis.hgetex("user:789", "name", "email")assert result == ["Bob", None]

Use Cases

  • Session Management: Retrieve session data and extend its lifetime
  • Cache Refresh: Get cached data and update its TTL
  • Temporary Data: Access temporary data while managing its expiration
  • Rate Limiting: Fetch rate limit data and reset expiration
Loading search…