- Springboot框架是Java语言的必学框架之一,框架Springboot,dependence的是NOSQL中的Spring data Redis(Redis+driver)
- Redis客户端连接池lettuce,那么它的pom.xml模本配置如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
</dependencies>
- 连接远程redis服务,application.properties模本配置
spring.application.name=根据你的文件名
spring.data.redis.database=0
spring.data.redis.port=6379
spring.data.redis.host="ip地址"
spring.data.redis.password="redis密码"
- spring.data.redis.database和spring.data.redis.port这两个配置项是默认的,也可以自定义。
- 使用原生的RedisTemplate的配置类时,它不能将uncoide编码的数据项序列化,key项就是乱码形式展现,那么可以自己配置,RedisConfig.java如下:
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
return template;
}
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory)
{
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
StringRedisSerializer keySerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setHashKeySerializer(keySerializer);
Jackson2JsonRedisSerializer<Object> valueSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
valueSerializer.setObjectMapper(mapper);
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashValueSerializer(valueSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
- 消息订阅和消息发送,RedisConfig.java模本如下:
@Bean
RedisMessageListenerContainer container(LettuceConnectionFactory redisConnectionFactory,MessageListener messageListener) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
List<Topic> topicList = new ArrayList<>();
topicList.add(new PatternTopic("log"));
container.addMessageListener(messageListener, topicList);
return container;
}
@Bean
RedisMessageListenerContainer container(LettuceConnectionFactory redisConnectionFactory, MessageListenerAdapter messageListenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
List<Topic> topicList = new ArrayList<>();
topicList.add(new PatternTopic("log"));
container.addMessageListener(messageListenerAdapter, topicList);
return container;
}
@Bean
public MessageListenerAdapter listenerAdapter(MessageListener listener)
{
return new MessageListenerAdapter(listener);
}
- 订阅者subscriber接收发布者publish发布的消息,并将通过哪一条管道和管道消息体的消息项序列化,Subscriber.java的模本如下:
@Component
public class Subscriber implements MessageListener {
@Autowired
RedisTemplate redisTemplate;
@Override
public void onMessage(Message message, byte[]pattern)
{
byte[] channel = message.getChannel();
byte[] body = message.getBody();
Object channelInfo = redisTemplate.getKeySerializer().deserialize(channel);
Object bodyInfo = redisTemplate.getValueSerializer().deserialize(body);
System.out.println("管道:"+channelInfo+'-'+"消息内容:"+bodyInfo);
}
}
- Demo3Application.java模本如下:
@SpringBootApplication
public class Demo3Application {
public static void main(String[] args) {
SpringApplication.run(Demo3Application.class, args);
}
}
- Demo3ApplicationTests.java模本如下:
@SpringBootTest
class Demo3ApplicationTests {
@Autowired
RedisTemplate redisTemplate;
@Test
public void Test03()
{
ValueOperations timeOper = redisTemplate.opsForValue();
timeOper.set("time","2025-11-30");
}
}