Springboot2.0集成Redis(StringRedisTemplate)多數據源

1、Maven依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

2、application.yml配置redis

spring:
  redis:
    database: 0  # Redis數據庫索引(配置自己用的)
    database1: 1   # Redis數據庫索引(配置自己用的)
    host: 127.0.0.1  # Redis服務器地址
    port: 6379  # Redis服務器連接端口
    password:    # Redis服務器連接密碼(默認爲空)
    timeout: 8000  # 連接超時時間(毫秒)

3、RedisTemplateConfig配置

  創建一個RedisTemplateConfig.class,這裏配置了兩個redis連接的database,沒有特意配置兩個連接池需要的配置,如果有需要可以自行添加,爲了可以看到redis存儲list、set等value,而且需要在接下來封裝到StringUtils中,所以創建的是StringRedisTemlate

public class RedisTemplateConfig {
    /** redis數據庫*/
    @Value("${spring.redis.database}")
    private int redisDatabase;
    /** redis數據庫1*/
    @Value("${spring.redis.database1}")
    private int redis1Database;
    /** redis數據庫ip*/
    @Value("${spring.redis.host}")
    private String redisHost;
    /** redis數據庫端口*/
    @Value("${spring.redis.port}")
    private int redisPort;


    @Bean(name = "redisTemplate0")
    public StringRedisTemplate redisTemplate() {
        return buildRedisTemplate(buildConnectionFactory(jedisPoolConfig(),redisDatabase));
    }

    @Bean(name = "redisTemplate1")
    public StringRedisTemplate redisTemplate1() {
        return buildRedisTemplate(buildConnectionFactory(jedisPoolConfig(),redis1Database));
    }


     protected StringRedisTemplate buildRedisTemplate(RedisConnectionFactory connectionFactory) {
         StringRedisTemplate template = new StringRedisTemplate();
         template.setConnectionFactory(connectionFactory);
         template.setValueSerializer(stringRedisSerializer());
         template.afterPropertiesSet();
         return template;
     }

    @Bean
    public StringRedisSerializer stringRedisSerializer() {
        return new StringRedisSerializer();
    }

    /**
     * 連接池配置信息
     * @return
     */
    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //最大連接數
        jedisPoolConfig.setMaxTotal(100);
        //最小空閒連接數
        jedisPoolConfig.setMinIdle(20);
        //當池內沒有可用的連接時,最大等待時間
        jedisPoolConfig.setMaxWaitMillis(10000);
        return jedisPoolConfig;
    }

    /**
     * jedis連接工廠
     * @param jedisPoolConfig
     * @param database
     * @return
     */
    public JedisConnectionFactory buildConnectionFactory(JedisPoolConfig jedisPoolConfig, int database) {
        RedisStandaloneConfiguration redisStandaloneConfiguration =
                new RedisStandaloneConfiguration();
        //設置redis服務器的host或者ip地址
        redisStandaloneConfiguration.setHostName(redisHost);
        //設置默認使用的數據庫
        redisStandaloneConfiguration.setDatabase(database);
        //設置redis的服務的端口號
        redisStandaloneConfiguration.setPort(redisPort);
        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jedisBuilder=(JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)JedisClientConfiguration.builder();
        jedisBuilder.poolConfig(jedisPoolConfig);
        JedisClientConfiguration jedisClientConfiguration = jedisBuilder.build();
        return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
    }

4、創建RedisUtils和Redis1Utils,分別注入config中聲明的bean redisTemplate0和redisTemplate1

/**
 * Redis工具類
 */
@Component
public class RedisUtils {

    @Resource(name = "redisTemplate0")
    private StringRedisTemplate redisTemplate;

    public void setRedisTemplate(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public StringRedisTemplate getRedisTemplate() {
        return this.redisTemplate;
    }

    /** -------------------key相關操作--------------------- */

    /**
     * 刪除key
     *
     * @param key
     */
    public void delete(String key) {
        redisTemplate.delete(key);
    }

    /**
     * 批量刪除key
     *
     * @param keys
     */
    public void delete(Collection<String> keys) {
        redisTemplate.delete(keys);
    }

    /**
     * 序列化key
     *
     * @param key
     * @return
     */
    public byte[] dump(String key) {
        return redisTemplate.dump(key);
    }

    /**
     * 是否存在key
     *
     * @param key
     * @return
     */
    public Boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }
}
@Component
public class Redis1Utils {

    @Resource(name = "redisTemplate1")
    private StringRedisTemplate redisTemplate;

    public void setRedisTemplate(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public StringRedisTemplate getRedisTemplate() {
        return this.redisTemplate;
    }

    /** -------------------key相關操作--------------------- */

    /**
     * 刪除key
     *
     * @param key
     */
    public void delete(String key) {
        redisTemplate.delete(key);
    }

    /**
     * 批量刪除key
     *
     * @param keys
     */
    public void delete(Collection<String> keys) {
        redisTemplate.delete(keys);
    }

    /**
     * 序列化key
     *
     * @param key
     * @return
     */
    public byte[] dump(String key) {
        return redisTemplate.dump(key);
    }

    /**
     * 是否存在key
     *
     * @param key
     * @return
     */
    public Boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }
}

  RedisUtils操作太多了只截取了部分,主要展示通過@Resource注入了不同的StringRedisTemplate

5、Controller中的使用

  根據個人需要各自注入,然後就可以分別操作不同的redis庫了

@Autowired
private RedisUtils redisUtils;
@Autowired
private Redis1Utils redis1Utils;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章