• java练习生


    一、添加依赖

    <!--添加redis功能-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!--添加redis配置类中使用的通用连接池对象(GenericObjectPoolConfig)-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.8.1</version>
    </dependency>

    二、创建配置类

    2.1 添加连接配置信息(application.yml)

    spring: 
      redis: 
        sentinel: 
          master: test
          nodes: --1:6379,--2:6379,--3:6379
        password: ------
        database: 1
        lettuce: 
          pool: 
            max-active: 8
            max-wait: 10000
            max-idle: 8
            min-idle: 0

    2.2 创建配置类

    import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
    import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    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.RedisNode;
    import org.springframework.data.redis.connection.RedisSentinelConfiguration;
    import org.springframework.data.redis.connection.RedisServer;
    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.StringRedisTemplate;
    import org.springframework.data.redis.serializer.RedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    import java.time.Duration;
    import java.util.List;
    
    /**
     * redis配置类
     */
    @EnableConfigurationProperties(RedisProperties.class)
    @Configuration
    public class RedisConfig {
    
        private final RedisProperties properties;
    
        public RedisConfig(RedisProperties properties) {
            this.properties = properties;
        }
    
    
        @Bean(name = "StringRedisTemplate")
        public StringRedisTemplate stringRedisTemplate() {
            StringRedisTemplate redisTemplate = new StringRedisTemplate();
            RedisSerializer<String> stringSerializer = new StringRedisSerializer();
            redisTemplate.setKeySerializer(stringSerializer);
            redisTemplate.setValueSerializer(stringSerializer);
            redisTemplate.setHashKeySerializer(stringSerializer);
            redisTemplate.setHashValueSerializer(stringSerializer);
            redisTemplate.setConnectionFactory(getConnectionFactory());
            return redisTemplate;
        }
    
        @Bean
        public RedisConnectionFactory getConnectionFactory() {
            //哨兵模式
            RedisSentinelConfiguration configuration = new RedisSentinelConfiguration();
            configuration.setMaster(properties.getSentinel().getMaster());
            configuration.setPassword(properties.getPassword());
            configuration.setDatabase(properties.getDatabase());
            List<String> nodes = properties.getSentinel().getNodes();
            nodes.forEach(node -> {
                String[] str = node.split(":");
                RedisNode redisServer = new RedisServer(str[0], Integer.parseInt(str[1]));
                configuration.sentinel(redisServer);
            });
            LettuceConnectionFactory factory = new LettuceConnectionFactory(configuration, getPool());
            //使用前先校验连接,这个最好是要配置:不然会带来connection reset by peer
            factory.setValidateConnection(true);
            return factory;
        }
    
        @Bean
        public LettuceClientConfiguration getPool() {
            GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
            //redis客户端配置:超时时间默认
            LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder
                    builder = LettucePoolingClientConfiguration.builder().
                    commandTimeout(Duration.ofMillis(60000));
            //链接池配置
            RedisProperties.Pool pool = properties.getLettuce().getPool();
            genericObjectPoolConfig.setMaxIdle(pool.getMaxIdle());
            genericObjectPoolConfig.setMinIdle(pool.getMinIdle());
            genericObjectPoolConfig.setMaxTotal(pool.getMaxActive());
            genericObjectPoolConfig.setMaxWaitMillis(pool.getMaxWait().toMillis());
            builder.shutdownTimeout(Duration.ofMillis(4000));
            builder.poolConfig(genericObjectPoolConfig);
            return builder.build();
        }
    }
    View Code

    三、创建操作类

    3.1 接口

    public interface RedisService {
        /**
         * string 类型 设置
         *
         * @param key
         * @param value
         * @return
         */
        void set(String key, String value);
    
        /**
         * string 类型 get值
         *
         * @param key
         * @return
         */
        String get(String key);
    
        /**
         * 设置过期时间
         *
         * @param key
         * @param expire
         * @return
         */
        boolean expire(String key, long expire);
    }
    View Code

    3.2 实现

    import org.springframework.data.redis.core.*;
    import org.springframework.stereotype.Service;
    import hzq.maven.demo.service.redis.RedisService;
    
    import java.util.concurrent.TimeUnit;
    import javax.annotation.Resource;
    
    @Service
    public class RedisServiceImpl implements RedisService {
    
        @Resource
        private StringRedisTemplate stringRedisTemplate;
    
        /**
         *  不允许key永久存在,最长就是1天
         * @param key
         * @param value
         */
        @Override
        public void set(final String key, final String value) {
            stringRedisTemplate.opsForValue().set(key, value,1L, TimeUnit.DAYS);
        }
    
        @Override
        public String get(final String key) {
            return stringRedisTemplate.opsForValue().get(key);
        }
    
        @Override
        public boolean expire(final String key, long expire) {
            try {
                stringRedisTemplate.expire(key, expire, TimeUnit.SECONDS);
            }catch (Exception e){
                return false;
            }
            return true;
        }
    }
    View Code

    四、使用

    @Resource
    private final RedisService redisService;
    
    public  String getTestRedis(String key){
        return  redisService.get(key);
    }
    View Code
  • 相关阅读:
    ansible-playbook最佳实践
    zabbix 优化之 表分区
    ansible-playbook 打通ssh无秘钥
    jQuery 1.9 移除了 $.browser 的替代方法
    也谈前端基础设施建设
    滚动视差网站欣赏
    css常见的快捷开发代码汇总(长期更新)
    如何让搜索引擎抓取AJAX内容?
    Bookmarklet编写指南
    20个网页设计师应该学习的CSS3经典教程实例
  • 原文地址:https://www.cnblogs.com/ariter/p/14212775.html
Copyright © 2020-2023  润新知