Redis
Redis for state and caching
Redis
Redis is used for state management, caching, and vector search.
Installation
pip install "praisonaiagents[tools]"Docker Setup
docker run -d --name praison-redis -p 6379:6379 redis:7Quick Start
from praisonaiagents import Agent
agent = Agent(
name="Assistant",
instructions="You are a helpful assistant.",
memory={
"backend": "redis",
"db": "redis://localhost:6379",
"session_id": "my-session"
}
)
response = agent.start("Hello!")
print(response)Connection String Format
redis://localhost:6379
redis://:password@host:port/db_numberEnvironment Variables
export PRAISON_STATE_URL="redis://localhost:6379"import os
from praisonaiagents import Agent
agent = Agent(
name="Assistant",
memory={"db": os.getenv("PRAISON_STATE_URL")}
)CLI
# Validate connection
praisonai persistence doctor \
--state-url "redis://localhost:6379"Use Cases
- Session state caching
- Rate limiting
- Temporary data storage
- Vector search (Redis Stack)
When to Use
✅ Good for:
- Session caching
- Rate limiting
- Real-time features
- Pub/sub messaging
❌ Not recommended for:
- Long-term storage
- Complex queries
- Large datasets
Storage Backend (Advanced)
For training data, sessions, and general persistence, use the RedisBackend:
from praisonaiagents.storage import RedisBackend, BaseJSONStore
backend = RedisBackend(
url="redis://localhost:6379",
prefix="praison:",
ttl=3600 # 1 hour TTL
)
store = BaseJSONStore("session.json", backend=backend)
store.save({"messages": ["Hello"]})
data = store.load()from praisonai.train.agents.storage import TrainingStorage
from praisonaiagents.storage import RedisBackend
with TrainingStorage(
session_id="train-123",
backend=RedisBackend(url="redis://localhost:6379", prefix="train:", ttl=86400),
) as storage:
storage.save_iteration(...)
# Redis connection closed automatically at the end of the with blockfrom praisonai.cli.state.sessions import SessionManager
from praisonaiagents.storage import RedisBackend
backend = RedisBackend(url="redis://localhost:6379", prefix="session:", ttl=3600)
manager = SessionManager(backend=backend)
sessions = manager.list(limit=10)from praisonai.recipe.history import RunHistory
from praisonaiagents.storage import RedisBackend
backend = RedisBackend(url="redis://localhost:6379", prefix="runs:")
history = RunHistory(backend=backend)from praisonai.mcp_server.tool_index import MCPToolIndex
from praisonaiagents.storage import RedisBackend
backend = RedisBackend(url="redis://localhost:6379", prefix="mcp:")
index = MCPToolIndex(backend=backend)CLI Usage
# Training with Redis backend
praisonai train agents --input "Hello" --storage-backend redis://localhost:6379
# Session list with Redis backend
praisonai session list --storage-backend redis://localhost:6379RedisBackend Features
| Feature | Description |
|---|---|
| TTL Support | Automatic expiration with ttl parameter |
| Key Prefixing | Namespace isolation with prefix parameter |
| Sub-ms Latency | High-speed caching |
| Distributed | Shared state across nodes |
Production notes
RedisStateStore.scan_prefix(prefix) iterates the keyspace with a non-blocking SCAN cursor (batches of 500) instead of the O(N) blocking KEYS command. Prefer it over keys(pattern) when listing many keys on a production Redis instance, so a single read never freezes other clients on the single-threaded server.
from praisonai.persistence import create_state_store
store = create_state_store("redis", url="redis://localhost:6379")
recent = store.scan_prefix("session:")See Storage Backends for more details.