Spring Boot不同版本Redis设置JedisConnectionFactory

2022-06-10 21:32:30 浏览数 (1)

Spring Boot不同版本Redis设置JedisConnectionFactory的方式。

最近重构项目想引入Redis,之前1.0版本看项目里用的本地缓存Guava,这次重构后考虑要不要加入Redis。打算试试~

因为我以前做的项目用的Spring Boot版本比较低。还是老的 1.5.X版本的。 之前设置 JedisConnectionFactory 的方式与现在 2.X 版本有点不一样,所以记录一下,方便以后查看。

1.X 版本

设置 JedisConnectionFactory 方法:

代码语言:javascript复制
    @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 版本

1.

2.X 版本可以使用 RedisStandaloneConfiguration 来配置连接信息。

代码语言:javascript复制
    @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);
    }

2.

以上配置使用的是直接连接 Redis 的方式,即每次连接都创建新的连接。当并发量剧增时,这会带来性能上开销,同时由于没有对连接数进行限制,则可能使服务器崩溃导致无法响应。

所以一般情况下都会建立连接池,事先初始化一组连接,供需要 Redis 连接的线程取用。

代码语言:javascript复制
    @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);
    }

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/springboot不同版本redis设置jedisconnectionfactory

0 人点赞