zoukankan      html  css  js  c++  java
  • SpringBoot整合redis哨兵

    1、依赖

    ​ POM

            <!-- spring boot redis 缓存引入 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <!-- lettuce pool 缓存连接池 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
            </dependency>

    2、约定

    ​ application.properties

    redis.sentinel.nodes=luliang888.top:26379,luliang888.top:26380,luliang888.top:26381
    redis.sentinel.master.name=mymaster
    redis.auth=123456
    redis.database=0
    redis.pool.maxTotal=10
    redis.pool.maxIdle=5
    redis.pool.minIdle=3
    redis.pool.testOnBorrow=true

    3、配置

    package com.example.redis.config;
    
    import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.connection.RedisSentinelConfiguration;
    import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
    import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
    import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Set;
    
    @Configuration
    public class RedisConfig {
    
        @Bean("redisSentinelConfiguration")
        public RedisSentinelConfiguration getRedisSentinelConfiguration(
                @Value("${redis.sentinel.nodes}") String nodes,
                @Value("${redis.sentinel.master.name}") String masterName,
                @Value("${redis.auth}") String password,
                @Value("${redis.database}") int database
        ) {
            Set<String> redisNodes = new HashSet<>();
            redisNodes.addAll(Arrays.asList(nodes.split(",")));
            RedisSentinelConfiguration configuration = new RedisSentinelConfiguration(masterName, redisNodes);
            configuration.setDatabase(database);
            configuration.setPassword(password);
            return configuration;
        }
    
        @Bean("objectPoolConfig")
        public GenericObjectPoolConfig getObjectPoolConfig(
                @Value("${redis.pool.maxTotal}") int maxTotal,
                @Value("${redis.pool.maxIdle}") int maxIdle,
                @Value("${redis.pool.minIdle}") int minIdle,
                @Value("${redis.pool.testOnBorrow}") boolean testOnBorrow
        ) {
            GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
            poolConfig.setMaxTotal(maxTotal);
            poolConfig.setMaxIdle(maxIdle);
            poolConfig.setMinIdle(minIdle);
            poolConfig.setTestOnBorrow(testOnBorrow);
            return poolConfig;
        }
    
        @Bean("lettuceClientConfiguration")
        public LettuceClientConfiguration getLettuceClientConfiguration(
                @Autowired GenericObjectPoolConfig poolConfig
        ) { // 创建Lettuce组件的连接池客户端配置对象
            return LettucePoolingClientConfiguration.builder().poolConfig(poolConfig).build();
        }
    
        @Bean("redisConnectionFactory")
        public RedisConnectionFactory getConnectionFactory(
                @Autowired RedisSentinelConfiguration redisSentinelConfiguration,
                @Autowired LettuceClientConfiguration lettuceClientConfiguration
        ) {
            LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(redisSentinelConfiguration, lettuceClientConfiguration);
            return connectionFactory;
        }
    
        @Bean("redisTemplate")
        public RedisTemplate getRedisTempalate(
                @Autowired RedisConnectionFactory connectionFactory
        ) {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(connectionFactory);
            redisTemplate.setKeySerializer(new StringRedisSerializer()); // 数据的key通过字符串存储
            redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); // 保存的value为对象
            redisTemplate.setHashKeySerializer(new StringRedisSerializer()); // 数据的key通过字符串存储
            redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); // 保存的value为对象
            return redisTemplate;
        }
    
        @Bean("stringRedisTemplate")
        public StringRedisTemplate getStringRedisTemplate(
                @Autowired RedisConnectionFactory connectionFactory
        ) {
            StringRedisTemplate redisTemplate = new StringRedisTemplate();
            redisTemplate.setConnectionFactory(connectionFactory);
            return redisTemplate;
        }
    }

    4、测试

    @Test
    void testRedisTemplate() {
        redisTemplate.opsForValue().set("name", "学习");
        System.out.println(redisTemplate.opsForValue().get("name"));
    }
  • 相关阅读:
    python map 详解
    python 中的集合(set) 详解
    python中的列表(list) 切片详解
    django 创建数据库表 命令
    django如何检查创建的模型(model)是否有语法错误或者逻辑错误
    python 列表(list)去除重复的元素总结
    python中的 zip函数详解
    django post和get 比较
    正则表达式的特殊符号和字符详细解析
    .NET/MVC-发布到IIS6.1提示未能加载程序集System.Web.Http.WebHost
  • 原文地址:https://www.cnblogs.com/shenyixin/p/14365508.html
Copyright © 2011-2022 走看看