美文网首页
SpringBoot整合Redis缓存

SpringBoot整合Redis缓存

作者: MaLizhi | 来源:发表于2018-12-16 20:43 被阅读13次

    前言:此整合为非注解形式,使用工具类进行自主数据控制

    专有名词解析:Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装

    环境:
    IDEA版本2017.3.1 x64
    JDK1.8
    SpringBoot2.1.1

    总流程:

    • pom导入Redis的依赖组件
    • 全局配置文件配置Redis
    • 编写RedisTemplate工具类
    • 编写测试用例

    pom导入Redis的依赖组件

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    

    全局配置文件配置Redis

    spring:
      redis:
          host: yourIpAddress
          password: yourPassword
          port: 6379
          jedis:
            pool:
              #最大连接数据库连接数,设 0 为没有限制
              max-active: 8
              #最大等待连接中的数量,设 0 为没有限制
              max-idle: 8
              #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
              max-wait: -1ms
              #最小等待连接中的数量,设 0 为没有限制
              min-idle: 0
    

    编写RedisTemplate工具类

    /**
     * @create 2018-12-10 23:10
     * redis工具类
     */
    @Component
    public final class RedisUtil {
        @Autowired
        private RedisTemplate<Object, Object> redisTemplate;
    
        /**
         * 指定缓存失效时间
         *
         * @param key  键
         * @param time 时间(秒)
         * @return
         */
        public boolean expire(String key, long time) {
            try {
                if (time > 0) {
                    redisTemplate.expire(key, time, TimeUnit.SECONDS);
                }
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
        /**
         * 根据key 获取过期时间
         *
         * @param key 键 不能为null
         * @return 时间(秒) 返回0代表为永久有效
         */
        public long getExpire(String key) {
            return redisTemplate.getExpire(key, TimeUnit.SECONDS);
        }
    
        /**
         * 判断key是否存在
         *
         * @param key 键
         * @return true 存在 false不存在
         */
        public boolean hasKey(String key) {
            try {
                return redisTemplate.hasKey(key);
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
        /**
         * 删除缓存
         *
         * @param key 可以传一个值 或多个
         */
        @SuppressWarnings("unchecked")
        public void del(String... key) {
            if (key != null && key.length > 0) {
                if (key.length == 1) {
                    redisTemplate.delete(key[0]);
                } else {
                    redisTemplate.delete(CollectionUtils.arrayToList(key));
                }
            }
        }
        // ============================String=============================
    
        /**
         * 普通缓存获取
         *
         * @param key 键
         * @return 值
         */
        public Object get(String key) {
            return key == null ? null : redisTemplate.opsForValue().get(key);
        }
    
        /**
         * 普通缓存放入
         *
         * @param key   键
         * @param value 值
         * @return true成功 false失败
         */
        public boolean set(String key, Object value) {
            try {
                redisTemplate.opsForValue().set(key, value);
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
        /**
         * 普通缓存放入并设置时间
         *
         * @param key   键
         * @param value 值
         * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期
         * @return true成功 false 失败
         */
        public boolean set(String key, Object value, long time) {
            try {
                if (time > 0) {
                    redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
                } else {
                    set(key, value);
                }
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
        /**
         * 递增
         *
         * @param key   键
         * @param delta 要增加几(大于0)
         * @return
         */
        public long incr(String key, long delta) {
            if (delta < 0) {
                throw new RuntimeException("递增因子必须大于0");
            }
            return redisTemplate.opsForValue().increment(key, delta);
        }
    
        /**
         * 递减
         *
         * @param key   键
         * @param delta 要减少几(小于0)
         * @return
         */
        public long decr(String key, long delta) {
            if (delta < 0) {
                throw new RuntimeException("递减因子必须大于0");
            }
            return redisTemplate.opsForValue().increment(key, -delta);
        }
    }
    
    

    编写测试用例

    @Autowired
    RedisUtil redisUtil;
    
    @Test
        public void testRedis(){
            Employee employee = employeeMapper.getEmpById(1);
            //往redis中存入对象
            redisUtil.set("emp",employee);
            //从redis中取出对象
            Employee emp = (Employee) redisUtil.get("emp");
            System.out.println(emp);
        }
    

    查看缓存:


    更多关于Redis的配置可参考官网:https://redis.io/

    更多Spring Boot整合可浏览此博客:malizhi.cn

    相关文章

      网友评论

          本文标题:SpringBoot整合Redis缓存

          本文链接:https://www.haomeiwen.com/subject/lgoxkqtx.html