> ## Documentation Index
> Fetch the complete documentation index at: https://hyrex.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Key-Value Store

> Simple distributed state storage

Hyrex provides a built-in key-value store for sharing state between tasks and workers. All methods are static and can be called from anywhere in your application.

## Basic Usage

```python theme={null}
from hyrex import HyrexKV

# Set a value
HyrexKV.set("user:123:status", "active")

# Get a value
status = HyrexKV.get("user:123:status")  # Returns "active"

# Get with default value
status = HyrexKV.get("missing-key", default="unknown")  # Returns "unknown"

# Delete a value
HyrexKV.delete("user:123:status")
```

## Limitations

* **String only**: Both keys and values must be strings
* **1MB max**: Values are limited to 1MB (UTF-8 encoded)
* **No expiration**: Values persist until explicitly deleted
* **No atomic operations**: No increment, decrement, or compare-and-swap

## Common Patterns

### Task Coordination

```python theme={null}
@hy.task
def process_batch(batch_id: str):
    # Mark as processing
    HyrexKV.set(f"batch:{batch_id}:status", "processing")
    
    # Do work...
    
    # Mark complete
    HyrexKV.set(f"batch:{batch_id}:status", "complete")
```

### Simple Caching

```python theme={null}
@hy.task
def get_user_data(user_id: str):
    # Check cache
    cached = HyrexKV.get(f"cache:user:{user_id}")
    if cached:
        return json.loads(cached)
    
    # Fetch from DB
    user = fetch_from_db(user_id)
    
    # Cache result
    HyrexKV.set(f"cache:user:{user_id}", json.dumps(user))
    return user
```

### Progress Tracking

```python theme={null}
@hy.task
def long_task(job_id: str, total: int):
    for i in range(total):
        # Update progress
        HyrexKV.set(f"progress:{job_id}", str(i + 1))
        process_item(i)
    
    HyrexKV.delete(f"progress:{job_id}")
```
