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);
        }
    }
}

  

 

posted @ 2019-06-15 16:56  qqq齐  阅读(508)  评论(0)    收藏  举报