StringRedisSerializer是用来解决字符串的乱码问题的,首先贴出redis配置文件
<!-- 配置JedisPoolConfig相关参数 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- <property name="maxActive" value="${spring.redis.pool.maxActive}"></property> -->
<property name="maxIdle" value="${spring.redis.pool.maxIdle}"></property>
<property name="minIdle" value="${spring.redis.pool.minIdle}"></property>
<property name="maxWaitMillis" value="${spring.redis.pool.maxWaitMillis}"></property>
<property name="testOnBorrow" value="${spring.redis.pool.testOnBorrow}"></property>
<property name="testOnReturn" value="${spring.redis.pool.testOnReturn}"></property>
</bean>
<bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="redisConnectionFactory"></property>
</bean>
<!-- 配置RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="redisConnectionFactory"></property>
<property name="keySerializer">
<bean
class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
<property name="valueSerializer">
<bean
class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
</property>
<property name="hashKeySerializer">
<bean
class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.JacksonJsonRedisSerializer">
<constructor-arg type="java.lang.Class" value="java.lang.Object"></constructor-arg>
</bean>
</property>
</bean>
<!-- String序列化 -->
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
<bean id="jdkSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
<!-- 将监听实现类注册到spring容器中 -->
<bean id="dataSyncEventListener" class="com.jy.claim.commons.utils.redis.DataSyncEventListener"/>
<!-- 注册监听器并引入监听实现类 -->
<bean id="messageListener" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
<property name="delegate" ref="dataSyncEventListener"/>
<property name="serializer" ref="stringRedisSerializer"/>
<!--<property name="serializer" ref="jdkSerializer" />-->
</bean>
<!-- 消息监听:其中可以通过method方法自定义—监听实现类中用来处理消息的方法 -->
<redis:listener-container>
<!--指定消息处理方法,序列化方式及主题名称-->
<redis:listener ref="messageListener" method="onMessage" serializer="stringRedisSerializer" topic="channel1.0"/>
<!--<redis:listener ref="messageListener" method="onMessage" serializer="jdkSerializer" topic="java"/>-->
</redis:listener-container>
二、声明方式
在使用redisTemplate对redis进行操作是,如果是StringRedisSerializer的序列化方式则可以这样声明
//泛型设置为String,String
@Autowired
private RedisTemplate<String,String> redisTemplate;
获取数据采用以下形式获取
String channel = stringRedisSerializer.deserialize(message.getChannel());
String messageToUser = stringRedisSerializer.deserialize(message.getBody());