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


    引入依赖

            <!-- redis -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
    		    <groupId>redis.clients</groupId>
    		    <artifactId>jedis</artifactId>
    		</dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    application.properties 添加Redis配置

    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="***"
    
    • 1
    • 2
    • 3
    @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;
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

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

  • 相关阅读:
    1.写一个算法模型以及python算法工程化步骤
    Linux启动elasticsearch,提示权限不够
    【无标题】
    [2022-11-28]神经网络与深度学习 hw10 - LSTM和GRU
    文档翻译-免费的文档翻译软件批量
    使用 com.jacob.activeX 库实现 Word 到 PDF
    【Vue面试题十四】、说说你对vue的mixin的理解,有什么应用场景?
    文心一言 VS 讯飞星火 VS chatgpt (242)-- 算法导论17.4 1题
    花菁染料CY3/CY5.5/CY7标记壳多糖/壳聚糖/菊粉/果胶,CY3/CY5.5/CY7-Chitin/Chitosan/Inulin/Pectin
    django开发一个管理系统基于Python实现的酒店住房管理系统
  • 原文地址:https://blog.csdn.net/weixin_42594143/article/details/132811210