spring boot 整合redis以及发布订阅实现
1.导包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
2。配置文件
package com.qi.play.config;
import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* @Date: 2018/10/26 15:57
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setEnableTransactionSupport(true);
// 使用fastjson 替换默认序列化
GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer();
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setValueSerializer(fastJsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
//打开事务支持
template.setEnableTransactionSupport(true);
return template;
}
}
3、配置yml文件
spring :
redis:
host: 127.0.0.1
timeout: 3000
password: 123456
database: 0
port: 6379
jedis:
pool:
max-idle: 10
min-idle: 2
max-active: 50
max-wait: 2
4.直接注入redisTemplate即可
(1)发布订阅
@Autowared
private StringRedisTempalte stringRedisTemplate;
public void test1() {
stringRedisTemplate.convertAndSend("TEST_CHANNEL", "hello");
}
(2) 订阅
@Component
public class RedisConsumer{
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic("TEST_CHANNEL"));
return container;
}
@Bean
MessageListenerAdapter messageListener() {
return new MessageListenerAdapter(redisListener());
}
@Bean
TestRedisListener redisListener(){
return new TestRedisListener();
}
//使用默认的工厂初始化redis操作模板
@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory);
}
}
@Slf4j
public class TestRedisListener implements MessageListener {
@Override
public void onMessage(Message message, byte[] bytes) {
try {
log.info("message = {}" , new String(message.getBody(),"utf-8"));
} catch (UnsupportedEncodingException e) {
log.error("byte[] to string error ,", e);
}
}
}

浙公网安备 33010602011771号