Redis--Springboot获取redis订阅

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就是我们订阅到的消息,此时,可以在其中添加我们自己的业务逻辑。

发布模式还没有研究,后续补上!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值