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

1、Maven依賴

<dependency> 

<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-data-redis/<artifactid>
/<dependency>

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

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

5、Controller中的使用

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

@Autowired
private RedisUtils redisUtils;
@Autowired
private Redis1Utils redis1Utils;


分享到:


相關文章: