2014년 9월 3일 수요일

Spring Redis 사용해보기


Spring Redis 사용해보기

Spring Data Redis를 통해 pub/sub를 사용해보겠습니다. maven 세팅은 빼고 제가 실습했을 때 발생하는 문제에 대한 해결방법만 적어보았습니다.
문제가 더 많이 발생할 경우 이를 해당하는 방법을 추가로 업데이트 하도록 하겠습니다.

기본으로 사용시 jedisConnectionFactory 팩토리의 이름이 redisConnectionFactory 이여야 오류 발생 안함

<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:usePool="true" p:hostName="localhost" p:port="6379"/>

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory-ref="jedisConnectionFactory"/>

<bean id="listener" class="kcube.ekp.util.MyMessageListener"/>

<redis:listener-container>
<redis:listener ref="listener" topic="say"/>
</redis:listener-container>

사용 안할 시 redisContainer 사용


<bean id="messageListener" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
 <constructor-arg>
 <bean class="redisexample.DefaultMessageDelegate"/>
 </constructor-arg>
</bean>

<bean id="redisContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
 <property name="connectionFactory" ref="connectionFactory"/>
 <property name="messageListeners">
 
 <map>
 <entry key-ref="messageListener">
 <bean class="org.springframework.data.redis.listener.ChannelTopic">
 <constructor-arg value="chatroom">
 </bean>
 </entry>
 </map>
 </property>
</bean>

한글 깨짐 문제 발생

  • 리턴 타입을 String 으로 바꿔주기 GenericToStringSerializer 클래스를 사용해서 안에 생성자로 Object를 넣어줍니다. Object의 풀 경로를 적어줘야합니다.
  • redisTemplate 에서 p네임스페이스를 이용해서 valueSerializer-ref 에 앞에서 만든 GenericToStringSerializer 를 연결해줍니다.
<bean id="genericToStringSerializer" class="org.springframework.data.redis.serializer.GenericToStringSerializer">
<constructor-arg>
<value>java.lang.Object</value>
</constructor-arg>
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory-ref="redisConnectionFactory" p:valueSerializer-ref="genericToStringSerializer"/>

오브젝트 리턴 받기

  • 리턴 타입을 String 으로 바꿔주기 Jackson2JsonRedisSerializer클래스를 사용해서 안에 생성자로 java.util.Map를 넣어줍니다. Map의 풀 경로를 적어줘야합니다.
  • redisTemplate 에서 p네임스페이스를 이용해서 valueSerializer-ref 에 앞에서 만든 Jackson2JsonRedisSerializer를 연결해줍니다.
  • 맵형태로 리턴이 됩니다.
<bean id="jackson2JsonRedisSerializer" class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer">
<constructor-arg>
<value>java.util.Map</value>
</constructor-arg>
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connectionFactory-ref="redisConnectionFactory" p:valueSerializer-ref="jackson2JsonRedisSerializer"/>

댓글 없음:

댓글 쓰기