• spring boot 整合 redis


    自己开发环境需要安装 redis 服务,百度一下很多,下面主要说明Springboot 集成 redis 讲解

    我的版本 java8 + redis3.0 + springboot 1.5.9。 Spring redis 集成了 jedis

    redis 中存储的是 bytes

    1 spring boot已经支持集成 redis,在 mvn 中只需添加依赖即可。pom 配置片段如下

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
      </parent>
    ...
    
    <!-- 添加 redis 缓存支持 -->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

      1.2 对 redis 进行配置,修改配置文件 application.properties

    ## Redis 配置
    ## Redis数据库索引(默认为0)
    spring.redis.database=0
    ## Redis服务器地址
    spring.redis.host=127.0.0.1
    ## Redis服务器连接端口
    spring.redis.port=6379
    ## Redis服务器连接密码(默认为空)
    spring.redis.password=
    ## 连接池最大连接数(使用负值表示没有限制)
    spring.redis.pool.max-active=8
    ## 连接池最大阻塞等待时间(使用负值表示没有限制)
    spring.redis.pool.max-wait=-1
    ## 连接池中的最大空闲连接
    spring.redis.pool.max-idle=8
    ## 连接池中的最小空闲连接
    spring.redis.pool.min-idle=0
    ## 连接超时时间(毫秒)
    spring.redis.timeout=0

    2 连接 redis 需要 RedisConnection 和 RedisConnectionFactory,

    RedisConnection 是通过 RedisConnectionFactory 进行创建。

    RedisConnection 提供较低级的数据操作 (byte arrays)

      2.1 创建配置类 RedisConfig 

    @Configuration
    public class RedisConfig {
    
        @Autowired
        private RedisConnectionFactory redisConnectionFactory;
        
    }

    3 RedisTemplate

    RedisTemplate 是 redis 模块的核心类,是对 redis 操作的较高抽象具有丰富的特性。他关注的是序列化和连接管理。他是线程安全的,提供了如下操作接口

    HashOperations
    HyperLogLogOperations
    ListOperations
    SetOperations
    ValueOperations
    ZSetOperations

    Spring 还提供了一个 StringRedisTemplate,方便对 String 进行处理。java 中经常遇到对象,可以使用 jackson 进行对象-字符串 转化。可以提供一个工具类。

    JsonUtil

    public class JsonUtil {
    
        private static ObjectMapper objectMapper = new ObjectMapper();
    
        public static String convertObj2String(Object object) {
            String s = null;
            try {
                s = objectMapper.writeValueAsString(object);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return s;
        }
    
        public static <T> T convertString2Obj(String s, Class<T> clazz) {
            T t = null;
            try {
                t = objectMapper.readValue(s, clazz);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return t;
        }
    
    }

    至此,redis 配置如下

    @Configuration
    public class RedisConfig {
    
        @Autowired
        private RedisConnectionFactory redisConnectionFactory;
    
        @Bean
        public RedisTemplate<String, String> redisTemplate(){
            StringRedisTemplate redisTemplate = new StringRedisTemplate(redisConnectionFactory);
            return redisTemplate;
        }
    
    }

    说明:默认情况下bean的名称和方法名称相同,你也可以使用name属性来指定。上面的 IOC 容器中注册了 ID为 redisTemplate 的 bean。

    4 使用 redisTemplate 进行增删改查

    @Service
    public class RedisService {
    
        @Autowired
        private StringRedisTemplate redisTemplate;
    
        /**
         * 一周有多少秒
         */
        private static final long WEEK_SECONDS = 7 * 24 * 60 * 60;
    
    
        /**
         * 将 key,value 存放到redis数据库中,默认设置过期时间为一周
         *
         * @param key
         * @param value
         */
        public void set(String key, Object value) {
            redisTemplate.opsForValue().set(key, JsonUtil.convertObj2String(value), WEEK_SECONDS, TimeUnit.SECONDS);
        }
    
        /**
         * 将 key,value 存放到redis数据库中,设置过期时间单位是秒
         *
         * @param key
         * @param value
         * @param expireTime
         */
        public void set(String key, Object value, long expireTime) {
            redisTemplate.opsForValue().set(key, JsonUtil.convertObj2String(value), expireTime, TimeUnit.SECONDS);
        }
    
        /**
         * 判断 key 是否在 redis 数据库中
         *
         * @param key
         * @return
         */
        public boolean exists(final String key) {
            return redisTemplate.hasKey(key);
        }
    
        /**
         * 获取与 key 对应的对象
         * @param key
         * @param clazz 目标对象类型
         * @param <T>
         * @return
         */
        public <T> T get(String key, Class<T> clazz) {
            String s = get(key);
            if (s == null) {
                return null;
            }
            return JsonUtil.convertString2Obj(s, clazz);
        }
    
        /**
         * 获取 key 对应的字符串
         * @param key
         * @return
         */
        public String get(String key) {
            return redisTemplate.opsForValue().get(key);
        }
    
        /**
         * 删除 key 对应的 value
         * @param key
         */
        public void delete(String key) {
            redisTemplate.delete(key);
        }
    
    
    }
  • 相关阅读:
    手机自动化
    记录
    Linux 死机了怎么办
    前端源码
    LNMP环境
    PHP学习之路(一)
    py
    蜘蛛问题
    mongodb
    【HTML/XML 2】XML基础知识点总结
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/8302725.html
Copyright © 2020-2023  润新知