Redis Cache Module
Überblick
Dieses Modul stellt eine konkrete Implementierung der cache-api unter Verwendung von Redis als Caching-Backend bereit.
Architektur
Das Modul folgt dem Provider-Pattern:
- cache-api: Provider-agnostische Interfaces (
CacheService,DistributedCache) - redis-cache: Redis-spezifische Implementierung
Verwendung
Dependency Hinzufügen
dependencies {
implementation(projects.infrastructure.cache.redisCache)
}
Konfiguration
Das Modul verwendet Spring Boot Auto-Configuration. Konfigurieren Sie Redis über application.yml:
redis:
host: localhost
port: 6379
password: null # Optional
database: 0 # Default cache database
connectionTimeout: 2000
readTimeout: 2000
usePooling: true
maxPoolSize: 8
minPoolSize: 2
Code-Beispiel
@Service
class MyService(private val cache: DistributedCache) {
suspend fun getData(key: String): MyData? {
return cache.get(key, MyData::class)
}
suspend fun saveData(key: String, data: MyData) {
cache.put(key, data, ttl = 1.hours)
}
}
Features
- ✅ TTL-Unterstützung für Cache-Einträge
- ✅ Connection State Tracking
- ✅ Health Monitoring
- ✅ Jackson-basierte Serialisierung
- ✅ Connection Pooling mit Lettuce
- ✅ Kotlin Coroutines Support
Beans
Das Modul registriert folgende Spring Beans:
redisConnectionFactory: Standard Redis ConnectionFactoryredisTemplate: RedisTemplate<String, ByteArray> für Cache-OperationencacheSerializer: Jackson-basierter Serializer (kann überschrieben werden)cacheConfiguration: Standard Cache-Konfiguration (kann überschrieben werden)
Gleichzeitige Verwendung mit redis-event-store
⚠️ WICHTIG: Wenn Sie sowohl redis-cache als auch redis-event-store im selben Service verwenden:
Unterschiedliche Databases
Die Module verwenden separate Redis Databases, um Konflikte zu vermeiden:
- redis-cache: Database 0 (Standard)
- redis-event-store: Database 1 (konfigurierbar)
Konfigurationsbeispiel
# Redis Cache Konfiguration
redis:
host: localhost
port: 6379
database: 0 # Cache verwendet Database 0
# Redis Event Store Konfiguration
redis:
event-store:
host: localhost
port: 6379
database: 1 # Event Store verwendet Database 1
Bean-Namen
Die Module verwenden unterschiedliche Bean-Namen:
| Komponente | redis-cache | redis-event-store |
|---|---|---|
| ConnectionFactory | redisConnectionFactory |
eventStoreRedisConnectionFactory |
| Template | redisTemplate |
eventStoreRedisTemplate |
| Serializer | cacheSerializer |
eventSerializer |
Keine Konflikte
✅ Die Module sind so designed, dass sie ohne Konflikte gleichzeitig verwendet werden können:
- Separate ConnectionFactories mit
@Qualifier - Separate Property-Prefixes (
redisvsredis.event-store) - Unterschiedliche Database-Nummern
- Unterschiedliche Bean-Namen
Serialisierung
Das Modul verwendet Jackson für die Serialisierung:
- Automatische Kotlin-Modul Integration
- Java 8 Date/Time Support
- Custom Serializer können via
@Beanüberschrieben werden
Health Checks
Das Modul tracked automatisch den Redis-Verbindungsstatus:
- Connection State (CONNECTED, DISCONNECTED, CONNECTING)
- Connection State Listeners für Benachrichtigungen
- Automatische Reconnect-Versuche
Performance
- Connection Pooling: Wiederverwendbare Verbindungen via Lettuce
- Non-blocking I/O: Reaktive Operations mit Kotlin Coroutines
- Optimierte Serialisierung: Jackson-basiert mit Byte-Array-Caching
Troubleshooting
Redis Verbindungsfehler
RedisConnectionFailureException: Unable to connect to Redis
Lösung: Überprüfen Sie Redis-Server und Netzwerk-Konfiguration.
Serialisierungsfehler
SerializationException: Could not serialize object
Lösung: Stellen Sie sicher, dass Ihre Datenklassen mit Jackson serialisierbar sind (data classes, keine private Konstruktoren).
Bean-Konflikte mit Event Store
Wenn Sie Fehler wie "Multiple beans of type RedisConnectionFactory" erhalten:
Lösung: Verwenden Sie @Qualifier Annotations oder stellen Sie sicher, dass Sie die neueste Version beider Module verwenden (Bean-Namen-Konflikte sind bereits behoben).
Weitere Informationen
- Siehe auch: event-store-api README
- Siehe auch: redis-event-store README