Caching Module (Redis)
Complete guide to deploying and managing Redis caching with high performance, persistence, and monitoring capabilities.
🏗️ Overview
Section titled “🏗️ Overview”The Redis module provides high-performance in-memory data structure store used as a database, cache, and message broker. It offers exceptional performance, data persistence, and clustering capabilities for modern applications.
Architecture Components
Section titled “Architecture Components”Redis Deployment:├── Redis Master Pod├── Redis Replica Pods (Optional)├── Persistent Storage (Optional)├── Memory-Optimized Configuration├── Health Monitoring└── Performance Metrics
🚀 Features
Section titled “🚀 Features”High Performance Caching
Section titled “High Performance Caching”- In-Memory Storage: Ultra-fast data access with sub-millisecond response times
- Data Structures: Support for strings, hashes, lists, sets, sorted sets, and streams
- Atomic Operations: Thread-safe operations for concurrent access
- Pipelining: Batch multiple commands for improved throughput
Data Persistence
Section titled “Data Persistence”- RDB Snapshots: Point-in-time snapshots for backup and recovery
- AOF Logging: Append-only file for durability and crash recovery
- Hybrid Persistence: Combine RDB and AOF for optimal performance and safety
- Configurable Persistence: Flexible persistence strategies
Advanced Features
Section titled “Advanced Features”- Pub/Sub Messaging: Real-time messaging capabilities
- Lua Scripting: Server-side script execution
- Transactions: Multi-key atomic operations
- Streams: Log-like data structure for time-series data
📦 Deployment Configuration
Section titled “📦 Deployment Configuration”Helmfile Configuration
Section titled “Helmfile Configuration”The Redis deployment uses Helmfile for environment management:
repositories: - name: bitnami url: https://charts.bitnami.com/bitnami
releases: - name: redis namespace: default createNamespace: true chart: bitnami/redis values: - values.yaml
Core Configuration Values
Section titled “Core Configuration Values”architecture: standalone
cluster: enabled: false slaveCount: 0
usePassword: false
auth: enabled: false password: ""
replica: replicaCount: 0
persistence: enabled: false size: 8Gi
master: disableCommands: [] persistence: enabled: false resources: requests: cpu: 2000m memory: 1Gi limits: cpu: 4000m memory: 8Gi configuration: |- appendonly no save "" maxmemory 8000mb maxmemory-policy volatile-lru
resources: requests: memory: 1Gi cpu: 2000m limits: memory: 8Gi cpu: 4000m
Advanced Configuration Options
Section titled “Advanced Configuration Options”# High-availability configurationarchitecture: replicationreplica: replicaCount: 2
# Performance tuningmaster: configuration: |- maxmemory 6gb maxmemory-policy allkeys-lru appendonly yes appendfsync everysec save 900 1 save 300 10 save 60 10000
# Security configurationauth: enabled: true password: "secure-password" sentinel: true
# Monitoringmetrics: enabled: true serviceMonitor: enabled: true
🔧 Redis Configuration
Section titled “🔧 Redis Configuration”Memory Management
Section titled “Memory Management”# Memory configurationconfiguration: |- # Memory limits maxmemory 6gb maxmemory-policy allkeys-lru
# Persistence settings appendonly yes appendfsync everysec
# Snapshot settings save 900 1 save 300 10 save 60 10000
# Performance tuning tcp-keepalive 300 timeout 0 tcp-backlog 511
Eviction Policies
Section titled “Eviction Policies”# Available eviction policiesmaxmemory-policy: - noeviction # Never evict keys - allkeys-lru # Evict any key by LRU - volatile-lru # Evict expired keys by LRU - allkeys-random # Evict any key randomly - volatile-random # Evict expired keys randomly - volatile-ttl # Evict expired keys by TTL
Persistence Strategies
Section titled “Persistence Strategies”# RDB (Snapshot) configurationsave: - "900 1" # Save if at least 1 key changed in 900 seconds - "300 10" # Save if at least 10 keys changed in 300 seconds - "60 10000" # Save if at least 10000 keys changed in 60 seconds
# AOF (Append-Only File) configurationappendonly: yesappendfsync: - always # Sync on every write (safest, slowest) - everysec # Sync once per second (balanced) - no # Let OS handle syncing (fastest, least safe)
📊 Monitoring & Metrics
Section titled “📊 Monitoring & Metrics”Health Checks
Section titled “Health Checks”# Check Redis service statuskubectl get pods -l app.kubernetes.io/name=redis
# Check service endpointskubectl get endpoints -l app.kubernetes.io/name=redis
# Test Redis connectivitykubectl exec -it redis-master-0 -- redis-cli ping
Performance Monitoring
Section titled “Performance Monitoring”# Check resource usagekubectl top pods -l app.kubernetes.io/name=redis
# Monitor Redis memory usagekubectl exec -it redis-master-0 -- redis-cli info memory
# Check Redis statisticskubectl exec -it redis-master-0 -- redis-cli info stats
# Monitor slow querieskubectl exec -it redis-master-0 -- redis-cli slowlog get 10
Key Metrics
Section titled “Key Metrics”# Memory usagekubectl exec -it redis-master-0 -- redis-cli info memory | grep used_memory_human
# Hit ratekubectl exec -it redis-master-0 -- redis-cli info stats | grep keyspace_hits
# Connected clientskubectl exec -it redis-master-0 -- redis-cli info clients | grep connected_clients
# Database sizekubectl exec -it redis-master-0 -- redis-cli dbsize
Log Analysis
Section titled “Log Analysis”# View Redis logskubectl logs -l app.kubernetes.io/name=redis
# Follow logs in real-timekubectl logs -f deployment/redis-master
# Check for errorskubectl logs -l app.kubernetes.io/name=redis | grep ERROR
🚀 Deployment
Section titled “🚀 Deployment”Deploy Redis Module
Section titled “Deploy Redis Module”# Navigate to module directorycd iac/modules/redis
# Deploy using Helmfilehelmfile apply
# Verify deploymentkubectl get pods -l app.kubernetes.io/name=rediskubectl get services -l app.kubernetes.io/name=redis
Verify Deployment
Section titled “Verify Deployment”# Check pod statuskubectl get pods -l app.kubernetes.io/name=redis
# Test Redis connectionkubectl exec -it redis-master-0 -- redis-cli ping
# Check Redis infokubectl exec -it redis-master-0 -- redis-cli info server
Post-Deployment Setup
Section titled “Post-Deployment Setup”# Port forward for local accesskubectl port-forward svc/redis-master 6379:6379
# Test with redis-cliredis-cli -h localhost -p 6379 ping
# Set and get a test valueredis-cli -h localhost -p 6379 set test "Hello Redis"redis-cli -h localhost -p 6379 get test
🔧 Maintenance Operations
Section titled “🔧 Maintenance Operations”Backup Operations
Section titled “Backup Operations”# Create RDB backupkubectl exec -it redis-master-0 -- redis-cli save
# Copy RDB filekubectl cp redis-master-0:/data/dump.rdb ./redis-backup-$(date +%Y%m%d).rdb
# Restore from backupkubectl cp ./redis-backup-20240110.rdb redis-master-0:/data/dump.rdbkubectl exec -it redis-master-0 -- redis-cli flushallkubectl exec -it redis-master-0 -- redis-cli debug reload
Scaling Operations
Section titled “Scaling Operations”# Scale Redis replicas (if using replication)kubectl scale statefulset redis-replicas --replicas=3
# Update memory limitskubectl patch deployment redis-master -p '{"spec":{"template":{"spec":{"containers":[{"name":"redis","resources":{"limits":{"memory":"12Gi"}}}]}}}}'
Update Operations
Section titled “Update Operations”# Update Redis versionhelmfile apply
# Monitor update progresskubectl rollout status deployment/redis-master
# Rollback if neededkubectl rollout undo deployment/redis-master
🚨 Troubleshooting
Section titled “🚨 Troubleshooting”Common Issues
Section titled “Common Issues”1. Connection Problems
Section titled “1. Connection Problems”# Check service connectivitykubectl get services -l app.kubernetes.io/name=redis
# Test network connectivitykubectl exec -it redis-master-0 -- nc -zv redis-master 6379
# Verify DNS resolutionkubectl exec -it redis-master-0 -- nslookup redis-master
2. Memory Issues
Section titled “2. Memory Issues”# Check memory usagekubectl exec -it redis-master-0 -- redis-cli info memory
# Check eviction statisticskubectl exec -it redis-master-0 -- redis-cli info stats | grep evicted
# Monitor memory fragmentationkubectl exec -it redis-master-0 -- redis-cli info memory | grep mem_fragmentation
3. Performance Issues
Section titled “3. Performance Issues”# Check slow querieskubectl exec -it redis-master-0 -- redis-cli slowlog get 10
# Monitor command statisticskubectl exec -it redis-master-0 -- redis-cli info commandstats
# Check for blocking operationskubectl exec -it redis-master-0 -- redis-cli client list | grep -i block
4. Persistence Issues
Section titled “4. Persistence Issues”# Check AOF statuskubectl exec -it redis-master-0 -- redis-cli info persistence
# Check RDB statuskubectl exec -it redis-master-0 -- redis-cli info persistence | grep rdb
# Verify persistence fileskubectl exec -it redis-master-0 -- ls -la /data/
Recovery Procedures
Section titled “Recovery Procedures”Emergency Recovery
Section titled “Emergency Recovery”# Force delete stuck podskubectl delete pod redis-master-0 --grace-period=0 --force
# Restore from backupkubectl cp ./redis-backup.rdb redis-master-0:/data/dump.rdbkubectl exec -it redis-master-0 -- redis-cli debug reload
# Verify data integritykubectl exec -it redis-master-0 -- redis-cli dbsize
🔒 Security Configuration
Section titled “🔒 Security Configuration”Authentication
Section titled “Authentication”# Enable authenticationauth: enabled: true password: "secure-password" sentinel: true
# Network securitynetworkPolicy: enabled: true allowExternal: false ingressRules: primaryAccessOnlyFrom: enabled: true namespaceSelector: matchLabels: name: production podSelector: matchLabels: app.kubernetes.io/name: backend
SSL/TLS Configuration
Section titled “SSL/TLS Configuration”# TLS configurationtls: enabled: true secretName: redis-tls
# Certificate configurationcertificatesSecret: "redis-certs"
📝 Configuration Examples
Section titled “📝 Configuration Examples”High-Performance Configuration
Section titled “High-Performance Configuration”# High-performance valuesresources: requests: memory: 8Gi cpu: 4000m limits: memory: 16Gi cpu: 8000m
# Performance tuningmaster: configuration: |- maxmemory 12gb maxmemory-policy allkeys-lru appendonly yes appendfsync everysec save 900 1 save 300 10 save 60 10000 tcp-keepalive 300 timeout 0 tcp-backlog 511
Memory-Optimized Configuration
Section titled “Memory-Optimized Configuration”# Memory optimizationmaster: configuration: |- maxmemory 4gb maxmemory-policy volatile-lru appendonly no save "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64
Persistence-Optimized Configuration
Section titled “Persistence-Optimized Configuration”# Persistence optimizationmaster: configuration: |- appendonly yes appendfsync everysec auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes
🔄 Maintenance Schedule
Section titled “🔄 Maintenance Schedule”Daily Tasks
Section titled “Daily Tasks”- Monitor memory usage
- Check persistence status
- Review slow queries
- Verify service health
Weekly Tasks
Section titled “Weekly Tasks”- Analyze performance metrics
- Review memory fragmentation
- Update statistics
- Check for updates
Monthly Tasks
Section titled “Monthly Tasks”- Capacity planning review
- Performance optimization
- Security audit
- Disaster recovery testing
📋 Operational Checklist
Section titled “📋 Operational Checklist”Pre-Deployment
Section titled “Pre-Deployment”- Storage classes configured
- Persistent volumes available
- Network policies defined
- Memory requirements calculated
- Persistence strategy defined
Post-Deployment
Section titled “Post-Deployment”- Redis service accessible
- Authentication configured
- Persistence working
- Monitoring configured
- Application connectivity tested
Regular Maintenance
Section titled “Regular Maintenance”- Memory usage optimized
- Performance metrics reviewed
- Security updates applied
- Capacity planning updated
- Disaster recovery tested
🔗 Related Documentation
Section titled “🔗 Related Documentation”- Backend Application - Redis integration
- Configuration Guide - Cache configuration
- Security Guide - Cache security
- Performance Guide - Cache optimization
The Redis caching module provides high-performance in-memory data storage with persistence, monitoring, and comprehensive management capabilities.