This project demonstrates a Redis Sentinel High Availability setup with Spring Boot, featuring:
- Master-Replica Architecture with automatic failover
- Read/Write Separation for optimal performance
- Redis Sentinel Cluster for monitoring and failover
- Dual Cache Management with fallback mechanisms
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Spring Boot Application β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββ βββββββββββββββββββ β
β β UserController β β RedisService β β
β β β β β β
β β - getAllUsers() ββββββββββΆβ - setValue() β (WRITES) β
β β - createUser() β β - getValue() β (READS) β
β β - updateUser() β β - deleteKey() β (DELETES) β
β β - deleteUser() β β - hasKey() β (CHECKS) β
β βββββββββββββββββββ βββββββββββββββββββ β
β β β β
β βΌ βΌ β
β βββββββββββββββββββ βββββββββββββββββββ β
β β UserService β β RedisConfig β β
β β β β β β
β β @Cacheable β β βββββββββββββββ β β
β β @CachePut β β βmasterTemplateβ ββββ β
β β @CacheEvict β β βββββββββββββββ β β β
β βββββββββββββββββββ β βββββββββββββββ β β β
β β βreplicaTemplateβ ββββ€ β
β β βββββββββββββββ β β β
β βββββββββββββββββββ β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββ
β
ββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββ
β Redis Infrastructure β β
β βΌ β
β βββββββββββββββββββ βββββββββββββββββββ β
β β Master Template β βReplica Template β β
β β β β β β
β β ReadFrom.MASTER β βReadFrom.REPLICA β β
β β (Writes Only) β β (Reads Preferred)β β
β βββββββββββββββββββ βββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββΌββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Sentinel-1 β β Sentinel-2 β β Sentinel-3 β
β Port: 26379 β β Port: 26380 β β Port: 26381 β
β Monitor: master β β Monitor: master β β Monitor: master β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β β
βββββββββββββββββββΌββββββββββββββββββ
β
ββββββββββββββΌβββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ
β Redis Master β β Redis Replica β
β Port: 6379 ββββββββΆβ Port: 6380 β
β β
Read/Write β SYNC β β
Read Only β
β β
Auto-Failoverβ β β
Sync Data β
βββββββββββββββββββ βββββββββββββββββββ
spring:
data:
redis:
# Standalone Configuration (Fallback)
host: localhost
port: 6379
password: # optional
# Sentinel Configuration (High Availability)
sentinel:
enabled: true/false # Toggle between modes
master: mymaster # Master name monitored by Sentinels
nodes: # Sentinel node addresses
- localhost:26379
- localhost:26380
- localhost:26381
database: 0
enable-read-from-replica: true@ConfigurationProperties(prefix = "spring.data")
public class ApplicationProperties {
private Redis redis;
public static class Redis {
private String host, password;
private int port;
private Sentinel sentinel = new Sentinel();
public static class Sentinel {
private boolean enabled = false;
private String master = "mymaster";
private List<String> nodes;
private boolean enableReadFromReplica = true;
}
}
}- Dual Connection Factories: Master and Replica
- Read/Write Separation:
ReadFrom.MASTERvsReadFrom.REPLICA_PREFERRED - Sentinel Support: Automatic discovery and failover
- Fallback Logic: Standalone mode when Sentinels unavailable
1. User API Call β UserController
2. UserService (@CachePut/@CacheEvict)
3. FallbackRedisCacheManager
4. Master RedisTemplate β Redis Master
5. Redis Master β Replicates to β Redis Replica
1. User API Call β UserController
2. UserService (@Cacheable)
3. FallbackRedisCacheManager
4. Replica RedisTemplate β Redis Replica (preferred)
5. Fallback to Master if Replica fails
Master Cache: "masterNode-> users::1"
"masterNode-> users::all-users"
"masterNode-> users::name:john"
Replica Cache: "replicaNode-> users::1"
"replicaNode-> users::all-users"
"replicaNode-> users::name:john"
1. Sentinel-1: "Master is down!"
2. Sentinel-2: "I agree!"
3. Sentinel-3: "Confirmed!"
Result: 3/3 agree β Quorum (2) reached β Start failover
Master Fails β Sentinels Detect β Vote β Promote Replica β
Update Configuration β App Reconnects β Zero Downtime
Timing:
- Detection: 5 seconds (configurable)
- Failover: 10 seconds max (configurable)
- App Reconnection: Automatic (Lettuce client)
- Sentinel Monitoring: 3 Sentinels monitor master/replica health
- Consensus Voting: Majority (2/3) required for failover decisions
- Zero Downtime: Application automatically connects to new master
- Load Distribution: Reads prefer replica, writes to master
- Performance: Reduced load on master node
- Fallback: Automatic fallback to master if replica fails
- Synchronous Replication: Master β Replica data sync
- Cache Synchronization: Both master and replica caches updated
- TTL Management: 10-minute cache expiration
- Auto-Reconnection: Lettuce client handles connection failures
- Circuit Breaker: Graceful degradation when Redis unavailable
- Health Monitoring: Built-in health checks for all components
- Cache-Aside Pattern: Load data on cache miss
- Write-Through: Update cache on data modification
- TTL-Based Expiration: 10-minute default expiration
- Format: Jackson JSON serialization for human-readable cache
- Compression: Efficient storage and network transfer
- Type Safety: Strongly typed cache operations
- Lettuce Client: High-performance async Redis client
- Connection Reuse: Efficient connection management
- Thread Safety: Concurrent access support
GET /actuator/health
- master: UP/DOWN
- replica: UP/DOWN
- message: Status details
- Hit/Miss Ratios: Cache effectiveness monitoring
- Key Patterns: Cache usage analysis
- Memory Usage: Redis memory consumption
- Connection Status: Real-time connection health
log.info("Writing to master: {} = {}", key, value);
log.info("Reading from replica: {}", key);
log.warn("Failed to read from replica, falling back to master");β
High Availability: 99.9% uptime with automatic failover
β
Performance: Read scaling through replica distribution
β
Reliability: Multiple sentinel consensus prevents false failovers
β
Scalability: Easy to add more replicas for read scaling
β
Monitoring: Comprehensive health checks and metrics
β
Zero Downtime: Seamless failover without application restart
β
Data Safety: Automatic replication ensures data persistence
This architecture provides enterprise-grade Redis high availability with automatic failover, making it production-ready for critical applications.