目录
在日常的开发中,使用Redis作为缓存中间件来提高查询性能已经很常见。通常为了简化开发,提高开发效率,我们在实际开发中会封装一些工具类来满足我们的诉求。
本文以Java工程为例,介绍基于JedisPool的Redis工具类的使用。
一、Maven依赖
<!-- jedis依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.3</version>
</dependency>
二、Redis配置类
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
* Redis配置类,Redis集群为主从模式。
*/
@Configuration
@Slf4j
@EnableCaching
public class RedisConfig {
/**
* 30分钟缓存
*/
public final static Integer SECOND_1800 = 30*60;
/**
* Redis Host
*/
@Value("${spring.redis.host}")
private String redisHost;
/**
* Redis Port
*/
@Value("${spring.redis.port}")
private Integer redisPort;
/**
* Redis Password
*/
@Value("${spring.redis.password}")
private String redisPassWord;
/**
* jedis pool config
* 配置连接池线程数(减少线程的频繁创建带来的开销)、超时时间(提高服务可用性)等参数。
* @return
*/
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig config = new JedisPoolConfig();
// 连接池中最小空闲连接
config.setMinIdle(1);
// 连接池中最大空闲连接
config.setMaxIdle(8);
// 连接池最大连接数
config.setMaxTotal(8);
// 连接池最大堵塞等待时间,2000ms
config.setMaxWaitMillis(2000L);
// 获取连接时校验有效性
config.setTestOnBorrow(true);
// 连接空闲时定时校验有效性
config.setTestWhileIdle(true);
// 连接空闲时定时校验有效性间隔时间,1分钟
config.setTimeBetweenEvictionRunsMillis(1000L*60);
return config;
}
/**
* 创建JedisClient
* @return
*/
@Bean
public JedisClientConfiguration jedisClientConfiguration(JedisPoolConfig jedisPoolConfig) {
JedisClientConfiguration.JedisClientConfigurationBuilder builder = JedisClientConfiguration.builder();
return builder.usePooling()
.poolConfig(jedisPoolConfig)
.build();
}
/**
* 配置Redis连接。
* Reids一共提供了RedisStandaloneConfiguration(单节点)、RedisSentinelConfiguration(哨兵)、RedisClusterConfiguration(集群)
* @return
*/
@Bean
RedisStandaloneConfiguration redisStandaloneConfiguration() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(redisHost);
redisStandaloneConfiguration.