Files
life-echo/api/.agents/skills/redis-development/rules/data-hash-field-expiry.md

63 lines
2.0 KiB
Markdown
Raw Normal View History

---
title: Use Hash Field Expiration for Per-Field TTL
impact: MEDIUM
impactDescription: Fine-grained expiration without managing timers
tags: hash, expiration, ttl, hexpire
description: Use Hash Field Expiration for Per-Field TTL
alwaysApply: true
---
## Use Hash Field Expiration for Per-Field TTL
Use hash field expiration (Redis 7.4+) to delete individual fields automatically from a hash after a specific period of time. This is useful for caching scenarios where different fields have different lifetimes, and is easier than managing expiration from your own code.
**Correct:** Use HEXPIRE to set per-field TTL on hash fields.
**Python** (redis-py):
```python
import redis
client = redis.Redis(host='localhost', port=6379)
# Set hash fields
client.hset("sensor:sensor1", mapping={
"air_quality": "256",
"battery_level": "89"
})
# Set 60-second TTL on specific fields (Redis 7.4+)
client.hexpire("sensor:sensor1", 60, "air_quality", "battery_level")
```
**Java** (Jedis):
```java
import redis.clients.jedis.UnifiedJedis;
import java.util.Map;
import java.util.HashMap;
try (UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379")) {
Map<String, String> hashFields = new HashMap<>();
hashFields.put("air_quality", "256");
hashFields.put("battery_level", "89");
jedis.hset("sensor:sensor1", hashFields);
// Set 60-second TTL on specific fields (Redis 7.4+)
jedis.hexpire("sensor:sensor1", 60, "air_quality", "battery_level");
}
```
**When to use:**
- Sensor data or metrics that become stale after a period
- Session attributes where different fields have different lifetimes
- Cached values within a hash that should auto-expire independently
- Temporary flags or tokens stored alongside persistent data
**When NOT needed:**
- Persistent user profiles or configuration
- Data where the entire hash should expire together (use `EXPIRE` on the key instead)
- Fields managed by application logic with explicit deletion
Reference: [HEXPIRE command](https://redis.io/docs/latest/commands/hexpire/)