Database/Redis

[Redis] redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value

Razelo 2022. 12. 2. 00:11

Jedis 를 사용해서 게임 서버를 작성하던 중 아래와 같은 예외를 만났다. 

 

redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value

 

사실 위 예외가 발생하는 정석적인 이유는 그저 타입이 맞지 않기 때문이다. 

 

그런데 나의 경우에는 예외가 발생하지 않을 것이라고 예상한 상황에 예외가 발생했다. 

 

아래 코드를 보자. 

 

참고로 아래 코드는 예외가 발생하지 않도록 수정한 코드이다. 

 

 

위 코드에서 sadd 하는 부분이 문제였다. 문제가 발생했던 코드에서는 sadd의 첫번째 파라미터인 Key로 nickname을 전달했었다.

 

그런데 nickname이 이미 Key로 잡혀있는 것 이다. 그래서 Operation against a key holding the wrong kind of value 라는 문구가 뜬 것이다. 

 

신기한 것은 코드 상에서만 발생하는 것이 아니라 redis-cli를 열어서 진행해도 똑같은 결과가 나왔다.

 

이 부분에 대해 친구와 이야기를 나눴는데 nickname이 redis 내부의 키워드로 잡혀있을 수 있다는 이야기가 나왔다.

 

그런데 아무리 redis nickname, jedis nickname에 대해 검색해봐도 내부 키워드로 잡혀있다는 정보는 얻지 못했다. 

 

그래서 다른 사유가 원인이라고 생각했다. 

 

아래는 nicknames 와 nickname을 확인해본 결과이다. 

 

 

그래서 오늘 내린 결론은 예전에 redis 내에 nickname 을 key로 잡았지만 그걸 set 구조가 아닌 다른 타입으로 잡아놓았을 수 있다는 결론을 내렸다. 

 

그리고 결론을 확인하기 위해 nicknames 와 nickname의 type을 확인해보기로 했다. 

 

실제로 type을 확인해본 결과 아래와 같은 결과가 나왔다. 

 

 

즉 두개 모두 string 으로 잡혀있던 셈이다. 

 

그렇기 때문에 sadd 를 할 경우 set이 아니기 때문에 WORNGTYPE 예외가 발생하는 것이다. 

 

결국은 예전에 잡아놓은 key의 타입이 맞지 않았기 때문에 발생한 문제이다. 

 

혹시나 다음에도 이런 문제가 발생한다면 type 명령어를 통해 type을 확인해보도록 하자. 

 

 

 

 

 

 

 

 

 

반응형