Azure and Enterprise Deployment#
This guide covers deploying langgraph-checkpoint-redis with managed Redis
services, including Azure Managed Redis, Azure Cache for Redis Enterprise, and
Redis Enterprise.
Key Principle: Use Standard Redis Client#
Managed Redis services such as Azure Managed Redis and Redis Enterprise use a
proxy layer that routes commands to the appropriate shard. Because the proxy
handles cluster topology, you must use the standard Redis client – not
RedisCluster:
from redis import Redis
# Correct: standard Redis client with managed services
client = Redis(
host="my-redis.eastus.redis.azure.net",
port=10000,
ssl=True,
password="your-access-key",
)
Using RedisCluster with these proxy-based services will cause connection
errors because the proxy does not support the CLUSTER command set.
Azure Managed Redis#
Azure Managed Redis (preview) is Microsoft’s latest managed Redis offering with built-in support for Redis modules.
Prerequisites#
Select the Enterprise or Enterprise Flash tier when creating the resource. The Basic/Standard/Premium tiers do not support RedisJSON or RediSearch.
Enable the RedisJSON and RediSearch modules at creation time. Modules cannot be added after the resource is created.
Connection Configuration#
from langgraph.checkpoint.redis import RedisSaver
# Azure Managed Redis uses port 10000 for TLS connections
REDIS_URL = "rediss://:your-access-key@my-redis.eastus.redis.azure.net:10000"
with RedisSaver.from_conn_string(REDIS_URL) as saver:
saver.setup()
graph = builder.compile(checkpointer=saver)
Or with explicit client configuration:
from redis import Redis
from langgraph.checkpoint.redis import RedisSaver
client = Redis(
host="my-redis.eastus.redis.azure.net",
port=10000,
password="your-access-key",
ssl=True,
ssl_cert_reqs="required",
decode_responses=False,
)
saver = RedisSaver(redis_client=client)
saver.setup()
Port Configuration#
Port |
Protocol |
Usage |
|---|---|---|
10000 |
TLS (rediss://) |
Default for Enterprise tier with SSL |
6379 |
Non-TLS (redis://) |
Available if non-TLS access is enabled |
Azure Cache for Redis Enterprise#
Azure Cache for Redis Enterprise is the established enterprise-grade Redis service on Azure.
Setup#
Create an Azure Cache for Redis resource with the Enterprise tier.
Under Modules, enable RedisJSON and RediSearch.
Note the hostname and access key from the Access keys blade.
Connection Example#
from redis import Redis
from langgraph.checkpoint.redis import RedisSaver
from langgraph.store.redis import RedisStore
# Standard Redis client -- do NOT use RedisCluster
client = Redis(
host="my-cache.region.redisenterprise.cache.azure.net",
port=10000,
password="your-access-key",
ssl=True,
)
# Checkpointer
saver = RedisSaver(redis_client=client)
saver.setup()
# Store (with same or separate client)
store = RedisStore(client)
store.setup()
graph = builder.compile(checkpointer=saver, store=store)
Redis Enterprise (Self-Managed)#
For self-managed Redis Enterprise deployments:
Module Requirements#
Ensure the following modules are enabled on your database:
RedisJSON – structured document storage
RediSearch – full-text and vector search indexing
Modules are configured at the database level in the Redis Enterprise admin console.
Connection Configuration#
from redis import Redis
from langgraph.checkpoint.redis import RedisSaver
# Redis Enterprise proxy endpoint
client = Redis(
host="redis-enterprise.internal.example.com",
port=12000, # Database-specific port
password="database-password",
ssl=True,
ssl_ca_certs="/path/to/ca.pem",
)
saver = RedisSaver(redis_client=client)
saver.setup()
SSL/TLS Configuration#
For production deployments, always use SSL/TLS:
from redis import Redis
client = Redis(
host="redis.example.com",
port=6380,
ssl=True,
ssl_certfile="/path/to/client-cert.pem",
ssl_keyfile="/path/to/client-key.pem",
ssl_ca_certs="/path/to/ca-cert.pem",
ssl_cert_reqs="required",
)
Using a connection URL with TLS:
# The "rediss://" scheme enables TLS
REDIS_URL = "rediss://:password@redis.example.com:6380"
with RedisSaver.from_conn_string(REDIS_URL) as saver:
saver.setup()
TTL Considerations for Enterprise#
TTL operations use Redis EXPIRE commands. On some enterprise proxy
configurations, EXPIRE commands in pipelines may fail independently of
JSON.SET commands. The library handles this gracefully:
Write operations (
put,put_writes) apply TTL as a best-effort step after the critical data write succeeds.A TTL failure does not cause data loss – the checkpoint is still stored, just without expiration.
Warning messages are logged when TTL application fails.
Complete Azure Example#
A full example combining checkpointer, store, and middleware on Azure:
from redis import Redis
from langgraph.checkpoint.redis import RedisSaver
from langgraph.store.redis import RedisStore
# Single client for Azure Managed Redis
client = Redis(
host="my-redis.eastus.redis.azure.net",
port=10000,
password="your-access-key",
ssl=True,
)
# TTL configured for 2-hour expiration
ttl_config = {"default_ttl": 120, "refresh_on_read": True}
saver = RedisSaver(redis_client=client, ttl=ttl_config)
saver.setup()
store = RedisStore(client, ttl=ttl_config)
store.setup()
graph = builder.compile(checkpointer=saver, store=store)
# Run with thread management
config = {"configurable": {"thread_id": "azure-session-1"}}
result = graph.invoke({"messages": ["Hello from Azure"]}, config)
Next Steps#
TTL Configuration – TTL configuration details
Checkpointers – checkpointer reference
Middleware – add middleware to your deployment