Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Redis 장애 대응 - 분산 락 및 캐시 리포지토리 Fallback 구현 #321

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from

Conversation

toychip
Copy link
Member

@toychip toychip commented Jan 2, 2025

Issue number and Link

Summary

기존 Docker-compose 에서 Redis 이미지 다운시 레디스 이미지를 무한정 기다리던 오류를 해결하니다.

Redis 장애 발생 시 Fallback 메커니즘을 적용하여 서비스의 안정성을 확보합니다.

  • 분산 락 (Distributed Lock): Redis 연결 실패 또는 장애 발생 시 JVM 기반 ReentrantLock을 사용하여 동시성 문제를 해결합니다.
  • 캐시 리포지토리 (Cache Repository): Redis 장애 발생 시 ConcurrentHashMap을 사용한 로컬 캐시로 자동 전환합니다.

Other Information

캐시 저장소 공통 인터페이스 정의 (get, set, exists, delete)
- RedisCacheRepository: Redis를 통해 캐시 데이터 저장 및 조회
- LocalCacheRepository: ConcurrentHashMap 기반 로컬 캐시 구현
- CacheRepositoryImpl: Redis 우선 사용, 실패 시 LocalCache로 Fallback
- Write-Through 전략 적용 (Redis와 Local 동시 저장)
- LocalCache 데이터를 주기적으로 Redis로 동기화
- 비동기 처리를 통해 성능 병목 현상 방지
- 배치 사이즈를 작게 설정하여 처리 성능 최적화
- 분산 락 관련 공통 인터페이스 정의 (tryLock, unlock)
- RedissonLockManager: Redis 기반 분산 락 구현
- LocalLockManager: JVM 내 ReentrantLock 기반 로컬 락 구현
- Local Lock 데이터를 주기적으로 Redis로 동기화
- 비동기 처리로 병목 현상 방지 및 성능 최적화
- AOP를 통해 DistributedLockService 사용하도록 변경
- Redis Lock 실패 시 자동으로 Local Lock으로 전환
@toychip toychip changed the title Feat/redis fallback impl feat: Redis 장애 대응 - 분산 락 및 캐시 리포지토리 Fallback 구현 Jan 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

feat: Redis 장애 대응 - 분산 락 및 캐시 리포지토리 Fallback 구현
1 participant