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이 캐시 되도록 허용해준다.