이제 Redis를 멈춰보겠습니다: @CacheEvict 파헤치기
37
AI 요약

이 글은 AI가 원문을 분석하여 핵심 내용을 요약한 것입니다.

Spring의 @CacheEvict와 Redis 캐시 무효화

이 게시물은 Spring Boot 환경에서 Redis 캐시를 관리하는 @CacheEvict 어노테이션의 동작 원리와 allEntries=true 설정의 위험성에 대해 설명합니다.

@CacheEvict 메커니즘

  • @CacheEvict는 키 기반 캐시 삭제를 수행하며, allEntries 옵션으로 전체 캐시를 삭제할 수 있음
  • allEntries=true일 경우 내부적으로 RedisCache의 clear() 메서드를 호출하여 와일드카드 패턴으로 키를 조회 후 삭제

Redis의 키 삭제 전략

  • DefaultRedisCacheWriter의 batchStrategy로 KEYS 또는 SCAN 방식을 사용
  • KEYS는 전체 키를 탐색하는 O(N) 연산으로 Redis 요청을 블록하여 지연과 장애를 유발할 수 있어 위험
  • SCAN은 커서 기반으로 점진적 탐색하나, 기본 설정은 KEYS임
  • 운영환경에서는 DEL 명령 대신 비동기적 메모리 해제 UNLINK 사용 권장

운영 환경 대응

캐시 무효화 시 KEYS 명령 사용으로 인한 Redis 성능 저하 문제를 인지하고, 안전한 캐시 관리 전략 마련이 필요함을 강조합니다.

연관 게시글