Spring Boot不同版本Redis设置JedisConnectionFactory的方式
最近重构项目想引入Redis,之前1.0版本看项目里用的本地缓存Guava,这次重构后考虑要不要加入Redis。打算试试~
因为我以前做的项目用的Spring Boot版本比较低。还是老的 1.5.X版本的。 之前设置 JedisConnectionFactory 的方式与现在 2.X 版本有点不一样,所以记录一下,方便以后查看。
1.X 版本
设置 JedisConnectionFactory 方法:
@Bean public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig){ String[] hostAndPorts = env.getProperty("spring.redis.cluster.nodes").split(","); JedisConnectionFactory jedisConnectionFactory = null; if(hostAndPorts.length==1){ //单机版 String host = hostAndPorts[0].split(":")[0]; int port = Integer.valueOf(hostAndPorts[0].split(":")[1]); String password = env.getProperty("spring.redis.password"); jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setPoolConfig(jedisPoolConfig); jedisConnectionFactory.setDatabase(1); jedisConnectionFactory.setHostName(host); jedisConnectionFactory.setPassword(password); jedisConnectionFactory.setPort(port); jedisConnectionFactory.setTimeout(5000); jedisConnectionFactory.afterPropertiesSet(); }else{ //集群版 RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(); String password = env.getProperty("spring.redis.password"); Set<RedisNode> nodes = new HashSet<RedisNode>(); for (String ipPort:hostAndPorts){ String[] ipAndPort = ipPort.split(":"); nodes.add(new RedisNode(ipAndPort[0].trim(),Integer.valueOf(ipAndPort[1]))); } redisClusterConfiguration.setClusterNodes(nodes); redisClusterConfiguration.setMaxRedirects(200); jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration,jedisPoolConfig); jedisConnectionFactory.setPassword(password); jedisConnectionFactory.afterPropertiesSet(); } return jedisConnectionFactory; }
在 2.X 版本使用的话会提示方法已过期,推荐使用下面的方法。
2.X 版本
2.X 版本可以使用 RedisStandaloneConfiguration 来配置连接信息。
@Bean public JedisConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName(env.getProperty("spring.redis.host")); redisStandaloneConfiguration.setPort(Integer.parseInt(env.getProperty("spring.redis.port"))); redisStandaloneConfiguration.setPassword(env.getProperty("spring.redis.password")); redisStandaloneConfiguration.setDatabase(Integer.parseInt(env.getProperty("spring.redis.database"))); return new JedisConnectionFactory(redisStandaloneConfiguration); }
以上配置使用的是直接连接 Redis 的方式,即每次连接都创建新的连接。当并发量剧增时,这会带来性能上开销,同时由于没有对连接数进行限制,则可能使服务器崩溃导致无法响应。
所以一般情况下都会建立连接池,事先初始化一组连接,供需要 Redis 连接的线程取用。
@Bean public JedisConnectionFactory redisConnectionFactory() { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(200); jedisPoolConfig.setMaxIdle(150); jedisPoolConfig.setMinIdle(50); RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName(env.getProperty("spring.redis.host")); redisStandaloneConfiguration.setPort(Integer.parseInt(env.getProperty("spring.redis.port"))); redisStandaloneConfiguration.setPassword(env.getProperty("spring.redis.password")); redisStandaloneConfiguration.setDatabase(Integer.parseInt(env.getProperty("spring.redis.database"))); JedisClientConfiguration.JedisClientConfigurationBuilder configurationBuilder = JedisClientConfiguration.builder(); JedisClientConfiguration jedisClientConfiguration = configurationBuilder.usePooling().poolConfig(jedisPoolConfig).build(); return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration); }
以上就是Spring Boot不同版本Redis设置JedisConnectionFactory详解的详细内容,更多关于Spring Boot Redis设置JedisConnectionFactory的资料请关注好代码网其它相关文章!