springboot集成redis时,需要添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--spring2.0集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
其中,jedis是用来获取redis的连接的。
订阅模式
Redis的订阅模式,发布方将消息推送到指定redis频道,订阅方只需要订阅相应的频道即可以获取其中信息,频道中的信息是以队列的形式呈现的,先推送的,先获取。
springboot集成redis时:
1:在application.yml中添加上相应的redis配置,具体如下:
spring:
redis:
timeout: 10000
host: 172.26.1.42
database: 0
port: 6379
channelname: videoCut
jedis:
pool:
min-idle: 0
max-idle: 8
max-active: 8
max-wait: 200
timeout:代表获取redis连接时,所等待的最长时间
host:代表redis服务所在的服务器的ip
database:代表redis推送的消息,存放在当前redis上的哪个数据库中
port:默认都是redis的默认端口,6379
jedis的配置代表的在获取redis连接时,对于连接的一些配置。
其中,channelname:代表redis订阅的频道名称,这是我自己定义的。
2.新建redis的配置类,具体如下:
package com.equaker.web.redis;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.stereotype.Component;
import redis.clients.jedis.JedisPoolConfig;
@Component
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private Integer port;
private RedisConnectionFactory connectionFactory;
@Bean(name = "RedisConnectionFactory")
public RedisConnectionFactory initRedisConnectionFactory(){
if(this.connectionFactory != null){
return this.connectionFactory;
}
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(8);
poolConfig.setMaxWaitMillis(200);
JedisConnectionFactory connectionFactory = new JedisConnectionFactory(poolConfig);
RedisStandaloneConfiguration standaloneConfiguration = connectionFactory.getStandaloneConfiguration();
connectionFactory.setHostName(host);
connectionFactory.setPort(port);
this.connectionFactory = connectionFactory;
return connectionFactory;
}
}
该配置类的作用主要是通过Jedis获取redis的连接,同时返回一个redis连接工厂的bean,该bean被spring的IOC容器管理。
3.在启动类中配置redis监听,具体如下:
@Value("${spring.redis.channelname}")
private String channelname;
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Autowired
private RedisSubscribe redisSubscribe;
@Bean
public RedisMessageListenerContainer initRedisContainer(){
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
Topic topic = new ChannelTopic(channelname);
container.addMessageListener(redisSubscribe,topic);
return container;
}
配置redis监听时,我们在配置文件中配置的channelname就可以发挥作用了,这里就可以指定订阅的频道号。
4.获取订阅到的redis订阅中的消息,具体如下:
/**
* 获取redis订阅
*/
@Slf4j
@Component
public class RedisSubscribe implements MessageListener {
@Override
public void onMessage(Message message, byte[] bytes) {
log.info("本次订阅到的数据:"+message);
}
该类需要实现MessageListener接口,在onMessage()方法中,其中推送的message就是我们订阅到的消息,此时,可以在其中添加我们自己的业务逻辑。
发布模式还没有研究,后续补上!!!