1.创建监听类实现MessageListener接口
@Component("redisMessageListener")
public class Sub implements MessageListener {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override
public void onMessage(Message message, byte[] pattern) {
byte[] body = message.getBody();
byte[] channel = message.getChannel();
String msg = (String) redisTemplate.getValueSerializer().deserialize(body);
String msgchannel = (String) redisTemplate.getValueSerializer().deserialize(channel);
String msgPattern = new String(pattern);
System.out.println("==>msg:" + msg + " ==>msgchannel:" + msgchannel + " ==>msgPattern:" + msgPattern);
}
}
2.xml文件配置监听渠道及redis相关配置
<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis.host}"/>
<property name="port" value="${redis.port}"/>
<property name="password" value="${redis.password}"/>
<property name="database" value="${redis.database}"/>
<property name="timeout" value="${redis.timeout}"/>
<property name="poolConfig" ref="poolConfig"/>
</bean>
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.maxIdle}"/>
<property name="maxTotal" value="${redis.maxTotal}"/>
<property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
</bean>
<bean id="jackson2JsonRedisSerializer"
class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer">
</bean>
<bean id="jdkSerializationRedisSerializer"
class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
<bean id="stringRedisSerializer"
class="org.springframework.data.redis.serializer.StringRedisSerializer">
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="keySerializer" ref="stringRedisSerializer" />
<property name="hashKeySerializer" ref="stringRedisSerializer" />
<property name="hashValueSerializer" ref="stringRedisSerializer" />
<property name="valueSerializer" ref="stringRedisSerializer" />
<property name="defaultSerializer" ref="stringRedisSerializer" />
<property name="connectionFactory" ref="redisConnectionFactory" />
</bean>
<!-- 定义监听容器 -->
<bean id="redisMessageListenerContainer"
class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
<property name="connectionFactory" ref="redisConnectionFactory" />
<!-- 任务执行器 -->
<property name="messageListeners">
<map>
<entry key-ref="redisMessageListener">
<list>
<bean class="org.springframework.data.redis.listener.PatternTopic">
<constructor-arg value="chat*" />
</bean>
<bean class="org.springframework.data.redis.listener.ChannelTopic">
<constructor-arg value="chen1" />
</bean>
<bean class="org.springframework.data.redis.listener.ChannelTopic">
<constructor-arg value="chen2" />
</bean>
<bean class="org.springframework.data.redis.listener.ChannelTopic">
<constructor-arg value="__keyevent@6__:expired" />
</bean>
</list>
</entry>
</map>
</property>
</bean>
3.编写测试类
@RestController
@RequestMapping("/aaa/redisTest")
public class TestController {
private Logger logger = LoggerFactory.getLogger(TestController.class);
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private RedisUtils redisUtils;
@RequestMapping("test")
public R test() {
redisTemplate.convertAndSend("chen1", "哈哈hello");
redisTemplate.convertAndSend("chen2", "哈哈哈world");
redisUtils.set("456", "失效了吗", 20);
return R.ok();
}
}