SpringBoot整合Redis快取

malizhi發表於2018-12-16

前言:此整合為非註解形式,使用工具類進行自主資料控制

專有名詞解析: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);
    }
複製程式碼

檢視快取:

SpringBoot整合Redis快取

SpringBoot整合Redis快取
更多關於Redis的配置可參考官網:redis.io/

更多Spring Boot整合可瀏覽此部落格:malizhi.cn

相關文章