[Redis] null 값 저장하지 않기 - 의도치 않은 RedisCacheManager 설정 오류

by 스뎅(thDeng) on

RedisCacheManager 선언 시, value로 null을 허용하지 않기 위해 disableCachingNullValues() 사용하면 강력한 예외를 만나게 된다.

하지만, 캐시 값으로 null을 반환하면, 아래 메시지의 IllegalArgumentException 을 만난다.

Avoid storing null via '@Cacheable(unless="#result == null")' or configure RedisCache to allow 'null' via RedisCacheConfiguration.

RedisCacheConfiguration#disableCachingNullValues 설정에 아래와 같은 주의 문구가 있다.

NOTE: any Cache.put(Object, Object) operation involving null value will error. Nothing will be written to Redis, nothing will be removed. An already existing key will still be there afterwards with the very same value as before.

주의: null value를 가지는 Cache.put(Object, Object) 작업은 오류가 발생한다. Redis에는 아무 것도 저장되지 않으며, 지워지는 것도 없다. 이미 존재하는 키는 이전과 아주 동일한 값으로 이후에도 계속 존재한다.

null을 value로 허용하지 않고 싶은 것은 맞지만, 강력하게 예외도 함께 만날 수 있다. 내 의도가 @Cacheable annotation이 달린 메소드가 null을 반환할 수 있지만 저장하지 않는다 라면 disableCachingNullValues() 를 사용하지 말고, 예외 메시지에 있는 방식으로 result를 확인하도록 처리해야 한다.

@Cacheable(value="defaultCache", key="#pk", unless="#result == null")
public Person findPerson(int pk) {
   return getSession.getPerson(pk);
}

참고

별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License