Configuring Redis for Embedding Studio's Suggestion System¶
This tutorial explains how to set up and configure Redis for Embedding Studio's suggestion system, covering installation, configuration, and optimization techniques.
Why Redis for Suggestions?¶
Redis with RediSearch provides several advantages for a suggestion system:
- Performance: Extremely fast for prefix-based searches
- Memory efficiency: Optimized for in-memory operations
- Advanced text search: Built-in support for fuzzy matching and prefix queries
- Scalability: Can handle high volumes of suggestion requests
Installation Requirements¶
1. Redis Stack Installation¶
You need Redis with the RediSearch module. The easiest way is to use Redis Stack, which includes RediSearch:
Using Docker:
docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest
Manual Installation:
Follow the Redis Stack installation guide for your platform.
2. Environment Configuration¶
In your Embedding Studio environment, set these configuration variables:
# Redis connection settings
REDIS_URL=redis://localhost:6379
# Suggestion system settings
SUGGESTING_REDIS_COLLECTION=suggestion_phrases
SUGGESTING_MAX_CHUNKS=20
These can be defined in your .env
file or set directly in your environment.
Basic Redis Configuration¶
Create a redis.conf
file with these recommended settings for the suggestion system:
# Memory configuration
maxmemory 2gb
maxmemory-policy allkeys-lru
# RediSearch configuration
search.query_timeout_ms 5000
search.prefix_min_length 1
search.max_expansion 100
# Performance tuning
io-threads 4
Start Redis with this configuration:
redis-server /path/to/redis.conf
Configuring the Suggesting Engine¶
1. Initializing the Redis Suggester¶
In Embedding Studio, the Redis-based suggester is configured in app_context.py
:
from embedding_studio.suggesting.redis.complex_redis_suggester import ComplexRedisSuggester
from embedding_studio.suggesting.tokenizer import SuggestingTokenizer
suggester = ComplexRedisSuggester(
redis_url=settings.REDIS_URL,
tokenizer=SuggestingTokenizer(),
index_name=settings.SUGGESTING_REDIS_COLLECTION,
max_chunks=settings.SUGGESTING_MAX_CHUNKS
)
2. Index Creation¶
When first used, Embedding Studio automatically creates the required Redis search index with the following fields:
- Text fields for chunks (
chunk_0
,chunk_1
, etc.) - Numeric fields for metadata (probability, chunk count)
- Tag fields for labels and domains
You can manually create or reset the index using Redis CLI:
# Connect to Redis
redis-cli
# Optionally, drop existing index
FT.DROPINDEX suggestion_phrases
# Exit
exit
The index will be automatically recreated when the application restarts.
Advanced Configuration¶
Memory Optimization¶
For large suggestion datasets, optimize Redis memory usage:
# In redis.conf
activedefrag yes
maxmemory-samples 10
Fine-tuning RediSearch¶
Adjust RediSearch settings for your specific needs:
# Faster but less accurate fuzzy matching
search.max_edit_distance 1
# Optimize for prefix searches
search.prefix_min_length 1
search.prefix_max_expansion 200
Persistence Configuration¶
Configure how Redis persists suggestion data:
# In redis.conf
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
This balances performance with data safety: - RDB snapshots at intervals - Append-only file for better durability - Syncing every second for good performance/safety balance
Securing Redis¶
For production environments, secure your Redis instance:
# In redis.conf
bind 127.0.0.1
requirepass YourStrongPassword
Update your Embedding Studio connection string:
REDIS_URL=redis://:YourStrongPassword@localhost:6379
Scaling Configuration¶
For high-volume production environments:
Redis Sentinel for High Availability¶
# In sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
Update your connection string:
REDIS_URL=redis+sentinel://mymaster/0?sentinels=localhost:26379,localhost:26380
Redis Cluster for Horizontal Scaling¶
For extremely large suggestion databases, configure Redis Cluster:
# Create cluster
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
Adjust your connection string:
REDIS_URL=redis://localhost:7000,localhost:7001,localhost:7002
Performance Monitoring¶
Monitor your Redis suggestion system performance:
# Connect to Redis
redis-cli
# Monitor memory usage
INFO memory
# Check search index stats
FT.INFO suggestion_phrases
# Exit
exit
Key metrics to monitor: - Memory usage - Search latency - Index size - Cache hit ratio
Loading Initial Suggestions¶
Here's how to preload suggestions into your Redis instance:
import requests
# Load a batch of suggestions
suggestions = [
{
"phrase": "how to make pasta",
"prob": 0.8,
"labels": ["cooking", "italian"],
"domains": ["recipes", "food"]
},
# Add more suggestions...
]
# Send to API
response = requests.post(
"http://your-embedding-studio/suggesting/phrases/add",
json={"phrases": suggestions}
)
print(f"Added {len(response.json()['phrase_ids'])} suggestions")
Common Configuration Issues¶
Problem: High Memory Usage¶
- Solution: Decrease
SUGGESTING_MAX_CHUNKS
or adjust Redismaxmemory
Problem: Slow Suggestion Responses¶
- Solution: Increase
io-threads
and adjust RediSearch timeout:search.query_timeout_ms 10000
Problem: Missing Fuzzy Matches¶
- Solution: Increase edit distance:
search.max_edit_distance 2