Cacheable 사용 중 Cache does not allow ‘null’ values

문제 상황

Null 값이 캐시되는 것을 막기 위해서 아래와 같이 설정을 하였다.

// Config 설정
RedisCacheConfiguration configuration = RedisCacheConfiguration  
    .defaultCacheConfig()  
    // null을 캐싱할지  
    .disableCachingNullValues()
 
// 캐시 적용 부분
@Cacheable(cacheNames = "userCart", key = "args[0]") 
public CartResponseDto findCartById(String userId) {
	...
}

위와 같이 설정을 해놓으면 null값일 경우 자동으로 걸러질 것이라고 생각하였다.
하지만 실행을 했더니 아래와 같은 에러가 발생하였다.

java.lang.IllegalArgumentException: Cache 'userCart' does not allow 'null' values; 
Avoid storing null via '@Cacheable(unless="#result == null")' or configure RedisCache to allow 'null' via RedisCacheConfiguration

확인해 보니 RedisManager는 null이 들어오면 걸러주는 것이 아닌 에러를 발생시키는 것이였다.

해결 방법

  • Cacheable 어노테이션에 unless = "#result == null" unless 옵션을 추가 한다.
  • RedisCacheConfig에서 null이 캐시 되도록 허용해준다.