【Java】Redis的配置和使用
引入 spring-data-redis 依赖
implementation "org.springframework.data:spring-data-redis"
官网说明文档
与 Redis 连接,有多种连接器。根据官网文档介绍,有以下几种:
- Jedis connector
- JRedis connector
- SRP connector
- Lettuce connector
以下只介绍 Jedis,但推荐使用 Lettuce,因为 Jedis 线程不安全,Lettuce 线程安全.
Jedis 和 Jedis Pool 的具体介绍请参考Jedis和Jedis连接池的基本使用和配置
SpringBoot 自动配置连接 Jedis
在 SpringBoot2.× 使用 jedis,之后被替换为 lettuce
配置信息
在 application.yml 中写配置信息
spring:
redis:
host: 127.0.0.1
port: 6379
database: 0
password:
jedis:
pool:
max-active: 32
max-wait: -1
max-idle: 8
min-idle: 0
p.s. 新版本的 jedis 中将 maxActive 改成了 maxTotal,MaxWait 改成了 MaxWaitMillis
自动装配
SpringBoot 会自动配置 Redis,所以只需要的地方使用 RedisTemplate
@Autowired
private RedisTemplate<String, String> redisTemplate;
自定义配置连接 Jedis
若需要将 redis 某功能封装成 framework,并可作为第三方包引入使用,则需要自行配置
排除自动装配
@SpringBootApplication(exclude = {RedisAutoConfiguration.class})
创建配置类
配置 JedisConnectionFactory 和 RedisTemplate Bean,注入 IOC 容器
@Configuration
public class RedisConfiguration {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.database}")
private int database;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.jedis.pool.max-wait}")
private int maxWait;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Bean
public JedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration(host, port);
serverConfig.setDatabase(database);
if (Strings.isNotBlank(password)) {
serverConfig.setPassword(password);
}
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxWaitMillis(maxWait);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
jpcb.poolConfig(poolConfig);
JedisClientConfiguration jedisClientConfiguration = jpcb.build();
return new JedisConnectionFactory(serverConfig, jedisClientConfiguration);
}
@Bean
public RedisTemplate<String, String> redisTemplate(JedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置序列化,防止乱码
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
//刷新配置
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
自动装配
在需要的地方使用 RedisTemplate
@Autowired
private RedisTemplate<String, String> redisTemplate;