springboot整合redis-sentinel哨兵模式集群(一)

引入依赖

java 复制代码
        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
		    <groupId>redis.clients</groupId>
		    <artifactId>jedis</artifactId>
		</dependency>

application.properties 添加Redis配置

java 复制代码
redis.cluster="192.168.74.142:7000,192.168.74.142:7001,192.168.74.142:7002,192.168.74.130:7003,192.168.74.130:7004,192.168.74.130:7005"#集群地址
redis.masterName="xxx"
redis.password="***"
java 复制代码
@Configuration
public class RedisSentinelConfig {

    @Value("${redis.cluster}")
    private String nodesStr;
    
    @Value("${redis.masterName}")
    private String masterName;
    
    @Value("${redis.password}")
    private String masterName;
    
    private static final String COLON = ",";
    private static final String COMMA=":";
 
    // 配置RedisSentinelConfig
    @Bean
    public RedisSentinelConfiguration redisSentinelConfiguration(){
        RedisSentinelConfiguration configuration = new RedisSentinelConfiguration();
        String[] host = nodesStr.split(COLON);
        for (String redisHost : host) {
            String[] item = redisHost.split(COMMA);
            String ip = item[0];
            String port = item[1];
            configuration.addSentinel(new RedisNode(ip, Integer.parseInt(port)));
        }
        configuration.setMaster(masterName);
        return configuration;
    }
    
    // 配置redis连接池JedisSentinelPoolConfig
    @Bean
    public JedisPoolConfig jedisSentinelPoolConfiggg() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //最大连接数,默认为8个,当连接池中的连接数达到最大连接数时,新的连接请求将会被阻塞,直到有连接被释放回连接池中
        jedisPoolConfig.setMaxTotal(3);
        //最大空闲连接数,默认为8个,当连接池中的空闲连接数超过最大空闲连接数时,多余的连接将会被关闭
        jedisPoolConfig.setMaxIdle(1);
        //JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        //jedisConnectionFactory.set
        jedisPoolConfig.setMinIdle(0);
        //当连接池中的连接耗尽且blockWhenExhausted为true时,等待获取连接的最大时间(单位为毫秒),默认值为-1,表示永不超时
        jedisPoolConfig.setMaxWaitMillis(2 * 1000L);
        //当连接池中的连接耗尽时,是否阻塞等待,默认值为true。如果设置为false,则当连接池中的连接耗尽时,会直接抛出异常
        jedisPoolConfig.setBlockWhenExhausted(true);
        //设置的逐出策略类名,默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数据超过最大空闲连接数)
        jedisPoolConfig.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
        //是否启用Pool的JMX管理功能,默认为true
        jedisPoolConfig.setJmxEnabled(true);
        //在borrow一个jedis实例时,是否提前进行validate操作,如果为true,则得到的jedis实例均是可用的;
        //在从连接池中获取连接时,是否进行连接有效性检查,默认值为false。如果设置为true,则在获取连接时会调用validateObject方法进行连接有效性检查
        jedisPoolConfig.setTestOnBorrow(true);
        return jedisPoolConfig;
    }

    //配置redis连接工厂jedisConnectionFactry
    @Bean
    public JedisConnectionFactory jedisConnectionFactry(@Autowired RedisSentinelConfiguration configuration, @Autowired JedisPoolConfig jedisPoolConfig){
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(configuration, jedisPoolConfig);
        jedisConnectionFactory.setPassword(password);
        return jedisConnectionFactory;
    }


    //RedisTemplate配置类
	@Bean
	@Autowired
	public StringRedisTemplate redisTemplate(RedisConnectionFactory jedisConnectionFactory) {
	    // StringRedisSerializer和GenericJackson2JsonRedisSerializer是Spring Data Redis中常用的两种序列化方法
	    // StringRedisSerializer是RedisTemplate默认的key和value的序列化方式,它将对象序列化为字符串存储在Redis中。它适用于存储简单的字符串类型数据,如字符串、数字等。
	    // GenericJackson2JsonRedisSerializer是RedisTemplate默认的value的序列化方式,它使用Jackson库将对象序列化为JSON格式存储在Redis中。它适用于存储复杂的对象类型数据,如Java对象、集合、Map等
	    // 如果存储的是简单的字符串类型数据,可以使用StringRedisSerializer。如果存储的是复杂的对象类型数据,可以使用GenericJackson2JsonRedisSerializer。也可以根据自己的需求自定义序列化方式
		StringRedisTemplate redisTemplate = new StringRedisTemplate();
		redisTemplate.setConnectionFactory(jedisConnectionFactory);
                // key采用String的序列化方式
		redisTemplate.setKeySerializer(new StringRedisSerializer());
                // valuevalue采用GenericJackson2JsonRedisSerializer序列化方式
		redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
		redisTemplate.afterPropertiesSet();
		return redisTemplate;
	}

参考博客: https://blog.csdn.net/weixin_42338444/article/details/102682584?spm=1001.2014.3001.5506

相关推荐
海兰4 分钟前
【第3篇-续】多模型多模态项目实现示例(增加OpenAI通用适配)附源代码
java·人工智能·spring boot·alibaba·spring ai
SarL EMEN1 小时前
海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
java·前端·spring boot
ccice011 小时前
全面掌握Spring Boot + MyBatis + Maven + MySQL:从开发到部署的后端技术详解
spring boot·maven·mybatis
QQ22792391022 小时前
Java springboot基于微信小程序的智慧旅游导游系统景点门票酒店预订(源码+文档+运行视频+讲解视频)
java·spring boot·微信小程序·maven·vuejs
是宇写的啊3 小时前
SpringBoot日志
java·spring boot·spring
devilnumber3 小时前
Redis 使用过程中可能遇到的常见问题或 “坑”
数据库·redis·缓存
消失的旧时光-19433 小时前
Spring Boot + MyBatis 从 0 到 1 跑通查询接口(含全部踩坑)
spring boot·后端·spring·mybatis
摇滚侠3 小时前
Redis 和 MySQL 数据同步方案,ElasticSearch 和 MySQL 数据同步方案
java·redis·mysql
人道领域3 小时前
【黑马点评日记03】实战:Redis缓存穿透,缓存击穿,缓存雪崩全解析
java·开发语言·jvm·redis·spring·tomcat
披着羊皮不是狼3 小时前
(9)批量生成文章并同步存入 MySQL 和 Redis
数据库·redis·mysql