千家信息网

SpringBoot项目如何接入Redis集群

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天小编给大家分享一下SpringBoot项目如何接入Redis集群的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收
千家信息网最后更新 2026年11月03日SpringBoot项目如何接入Redis集群

今天小编给大家分享一下SpringBoot项目如何接入Redis集群的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

配置参数

因为这篇文章不介绍 Redis 集群的搭建,这里我们假设已经有了一个 Redis 的集群环境,我们项目中需要调整以下几个部分

  1. 修改配置参数,集群的节点和密码配置;

  2. 确保引入的 Jedis 版本支持设置密码,spring-data-redis 1.8 以上,SpringBoot 1.5 以上才支持设置密码;

  3. 注入 RedisTemplate;

  4. 编写工具类;

修改配置参数

############### Redis 集群配置 #########################spring.custome.redis.cluster.nodes=172.20.0.1:7001,172.20.0.2:7002,172.20.0.3:7003spring.custome.redis.cluster.max-redirects=3spring.custome.redis.cluster.max-active=500spring.custome.redis.cluster.max-wait=-1spring.custome.redis.cluster.max-idle=500spring.custome.redis.cluster.min-idle=20spring.custome.redis.cluster.timeout=3000spring.custome.redis.cluster.password=redis.cluster.password

引入依赖(如果需要)

确保 SpringBoot 的版本大于 1.4.x 如果不是的话,采用如下配置,先排除 SpringBoot 中旧版本 Jedis 和 spring-data-redis,再依赖高版本的 Jedis 和 spring-data-redis。

               org.springframework.boot            spring-boot-starter-data-redis                                                            redis.clients                    jedis                                                    org.springframework.data                    spring-data-redis                                                                redis.clients            jedis            2.9.0                            org.springframework.data            spring-data-redis            1.8.0.RELEASE

注入 RedisTemplate

注入 RedisTemplate 我们需要三个组件,分别是JedisConnectionFactory 、RedisClusterConfiguration、JedisPoolConfig,下面是注入RedisTempalte 的代码。先根据配置创建 JedisConnectFactory 同时需要配置 RedisClusterConfiguration、JedisPoolConfig,最后将JedisConnectionFactory 返回用于创建RedisTemplate

import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Primary;import org.springframework.data.redis.connection.RedisClusterConfiguration;import org.springframework.data.redis.connection.RedisNode;import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;import java.util.ArrayList;import java.util.List;public class RedisClusterConfig {    @Bean(name = "redisTemplate")    @Primary    public RedisTemplate redisClusterTemplate(@Value("${spring.custome.redis.cluster.nodes}") String host,                                     @Value("${spring.custome.redis.cluster.password}") String password,                                     @Value("${spring.custome.redis.cluster.timeout}") long timeout,                                     @Value("${spring.custome.redis.cluster.max-redirects}") int maxRedirect,                                     @Value("${spring.custome.redis.cluster.max-active}") int maxActive,                                     @Value("${spring.custome.redis.cluster.max-wait}") int maxWait,                                     @Value("${spring.custome.redis.cluster.max-idle}") int maxIdle,                                     @Value("${spring.custome.redis.cluster.min-idle}") int minIdle) {        JedisConnectionFactory connectionFactory =  jedisClusterConnectionFactory(host, password,                timeout, maxRedirect, maxActive, maxWait, maxIdle, minIdle);        return createRedisClusterTemplate(connectionFactory);    }    private JedisConnectionFactory jedisClusterConnectionFactory(String host, String password,                                                                   long timeout, int maxRedirect, int maxActive, int maxWait, int maxIdle, int minIdle) {        RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();        List nodeList = new ArrayList();        String[] cNodes = host.split(",");        //分割出集群节点        for (String node : cNodes) {            String[] hp = node.split(":");            nodeList.add(new RedisNode(hp[0], Integer.parseInt(hp[1])));        }        redisClusterConfiguration.setClusterNodes(nodeList);        redisClusterConfiguration.setPassword(password);        redisClusterConfiguration.setMaxRedirects(maxRedirect);        // 连接池通用配置        GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();        genericObjectPoolConfig.setMaxIdle(maxIdle);        genericObjectPoolConfig.setMaxTotal(maxActive);        genericObjectPoolConfig.setMinIdle(minIdle);        genericObjectPoolConfig.setMaxWaitMillis(maxWait);        genericObjectPoolConfig.setTestWhileIdle(true);        genericObjectPoolConfig.setTimeBetweenEvictionRunsMillis(300000);        JedisClientConfiguration.DefaultJedisClientConfigurationBuilder builder = (JedisClientConfiguration.DefaultJedisClientConfigurationBuilder) JedisClientConfiguration                .builder();        builder.connectTimeout(Duration.ofSeconds(timeout));        builder.usePooling();        builder.poolConfig(genericObjectPoolConfig);        JedisConnectionFactory connectionFactory = new JedisConnectionFactory(redisClusterConfiguration, builder.build());        // 连接池初始化        connectionFactory.afterPropertiesSet();        return connectionFactory;    }    private RedisTemplate createRedisClusterTemplate(JedisConnectionFactory redisConnectionFactory) {        RedisTemplate redisTemplate = new RedisTemplate();        redisTemplate.setConnectionFactory(redisConnectionFactory);        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);        ObjectMapper om = new ObjectMapper();        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);        jackson2JsonRedisSerializer.setObjectMapper(om);        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();        // key采用String的序列化方式        redisTemplate.setKeySerializer(stringRedisSerializer);        // hash的key也采用String的序列化方式        redisTemplate.setHashKeySerializer(stringRedisSerializer);        // value序列化方式采用jackson        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);        // hash的value序列化方式采用jackson        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);        redisTemplate.afterPropertiesSet();        return redisTemplate;    }}

编写工具类

其实到这里基本上已经完成了,我们可以看到 SpringBoot 项目接入 Redis 集群还是比较简单的,而且如果之前单机环境就是采用RedisTemplate 的话,现在也就不需要编写工具类,之前的操作依旧有效。

/**     *  删除KEY     * @param key     * @return     */    public boolean delete(String key) {        try {            return getTemplate().delete(key);        } catch (Exception e) {            log.error("redis hasKey() is error");            return false;        }    }    /**     * 普通缓存获取     *     * @param key 键     * @return 值     */    public Object get(String key) {        return key == null ? null : getTemplate().opsForValue().get(key);    }    /**     * 普通缓存放入     *     * @param key   键     * @param value 值     * @return true成功 false失败     */    public boolean set(String key, Object value) {        try {            getTemplate().opsForValue().set(key, value);            return true;        } catch (Exception e) {            log.error("redis set() is error");            return false;        }    }    /**     * 普通缓存放入并设置时间     *     * @param key   键     * @param value 值     * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期     * @return true成功 false 失败     */    public boolean set(String key, Object value, long time) {        try {            if (time > 0) {                getTemplate().opsForValue().set(key, value, time, TimeUnit.SECONDS);            } else {                set(key, value);            }            return true;        } catch (Exception e) {            log.error("redis set() is error");            return false;        }    }    /**     * 计数器     *     * @param key 键     * @return 值     */    public Long incr(String key) {        return getTemplate().opsForValue().increment(key);    }    public Long incrBy(String key, long step) {        return getTemplate().opsForValue().increment(key, step);    }    /**     * HashGet     *     * @param key  键 不能为null     * @param item 项 不能为null     * @return 值     */    public Object hget(String key, String item) {        return getTemplate().opsForHash().get(key, item);    }    /**     * 获取hashKey对应的所有键值     *     * @param key 键     * @return 对应的多个键值     */    public Map hmget(String key) {        return getTemplate().opsForHash().entries(key);    }    /**     * 获取hashKey对应的批量键值     * @param key     * @param values     * @return     */    public List hmget(String key, List values) {        return getTemplate().opsForHash().multiGet(key, values);    }

以上就是"SpringBoot项目如何接入Redis集群"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

配置 集群 篇文章 项目 序列 方式 版本 知识 接入 普通 参数 密码 工具 缓存 成功 内容 就是 时间 环境 节点 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 互联网科技产业 互联网金融与金融科技 万易互联网科技 齐家互联网科技 互联网科技革命 互联网科技排名 撒么互联网科技公司 互联网科技公司介绍 甘肃拓世互联网科技有限公司 四个字互联网科技公司取名 云创客互联网科技公司 中国的互联网科技企业的崛起 福州新华互联网科技学校 知乎 贵州叶脉互联网科技有限公司所属行业 恒生互联网科技指数跳水 张家口科技产业互联网平台 科技信息时代互联网发展 杭州科技互联网公司有哪些 互联网科技企业文化 上海睿民互联网科技有限公司 山东特亿宝互联网科技有限公司 盈实互联网科技 善班互联网科技有限公司 赫美联合互联网科技 南平创想时代互联网科技有限公司 互联网方面的科技前沿 郑州欣桑互联网科技有限公司 互联网科技博主张洲 恒生科技指数 中概互联网
0