springboot搭檔redis緩存初體驗

1、配置pom.xml,加入 redis Maven文件

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

springboot 1.5之後的版本引入的是java

spring-boot-starter-data-redis

2、配置Redis

配置都是大同小異,更改爲本身合理的便可;redis

 1 ##Redis 配置
 2 spring.redis.database=0
 3 spring.redis.host=127.0.0.1
 4 spring.redis.port=6379
 5 spring.redis.password=asdf1234
 6 #鏈接池最大鏈接數
 7 spring.redis.jedis.pool.max-active=8
 8 #鏈接池最大阻塞等待時間,(負值沒有限制)
 9 spring.redis.jedis.pool.max-wait=-1
10 #鏈接池最大空閒鏈接
11 spring.redis.jedis.pool.max-idle=8
12 #鏈接池最小空閒鏈接
13 spring.redis.jedis.pool.min-idle=0
14 #鏈接超時時間
15 spring.redis.timeout=5000

3、封裝一個catchService工具類 

這裏只是簡單的封裝了經常使用的幾個方法,以後也好根據須要進行擴展;  spring

 1 @Service
 2 public class catchService {
 3     @Autowired
 4     RedisTemplate<Object, Object> redisTemplate;
 5 
 6     public void set(String key, Object value){
 7         redisTemplate.opsForValue().set(key, value);
 8     }
 9     public void set(String key, Object value, long timeout) {
10         set(key,value,timeout, TimeUnit.MINUTES);
11     }
12     public void set(String key, Object value, long timeout, TimeUnit timeUnit) {
13         redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
14     }
15 
16     public Object get(String key) {
17         return redisTemplate.opsForValue().get(key);
18     }
19 
20     public boolean hasKey(String key) {
21         return redisTemplate.hasKey(key);
22     }
23 
24     public boolean deleteKey(String key) {
25         return redisTemplate.delete(key);
26     }
27 
28 }

4、簡單使用

 1 package com.wzc.springboot_redis.service;
 2 
 3 import com.wzc.springboot_redis.entity.City;
 4 import com.wzc.springboot_redis.mapper.cityMapper;
 5 import org.slf4j.Logger;
 6 import org.slf4j.LoggerFactory;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.stereotype.Service;
 9 
10 import java.util.concurrent.TimeUnit;
11 
12 
13 @Service
14 public class cityService {
15     private static final Logger LOGGER = LoggerFactory.getLogger(cityService.class);
16     @Autowired
17     private cityMapper cityDao;
18 
19     @Autowired
20     private catchService catchService;
21 
22 
23     public City getCity(String id) {
24         String key = "city_" + id;
25         boolean hasKey = catchService.hasKey(key);
26         if(hasKey) {
27             City city = (City) catchService.get(key);
28             LOGGER.info("cityService.getCity(): 獲取城市信息 from catch >> " + city);
29             return city;
30         }else {
31             City city = cityDao.getCity(id);
32             catchService.set(key, city,15, TimeUnit.SECONDS);
33             LOGGER.info("cityService.getCity(): 信息插入緩存 >> " + city);
34             return city;
35         }
36     }
37 
38     public City updateCity(Long id, String cityName, Long provinceId, String description) {
39         City city = new City();
40         city.setId(id);
41         city.setCityName(cityName);
42         city.setProvinceId(provinceId);
43         city.setDescription(description);
44         cityDao.updateCity(city);
45 
46         String key = "city_" + id;
47         if(catchService.hasKey(key)) {
48             catchService.deleteKey(key);
49         }
50         return city;
51 
52     }
53 }

5、什麼時候考慮緩存

  配置類的東西說完,如今要 考慮何時須要考慮使用 緩存:sql

通常來看緩存是用來緩解數據庫的訪問壓力的,當系統或網站的處理和訪問量很是大的時候,其中查詢操做是一個系統最經常使用到的處理,就會頻繁的讀取數據庫,這將給數據庫帶來巨大的壓力,經過緩存頻繁訪問的數據存儲到緩存中從而能緩解數據庫的壓力。數據庫

還有就是用Redis作一個臨時存儲的工具用,例如我在處理系統Token時,使用的時黑名單方法,將用戶註銷掉的Token暫時存儲到Redis中,以備以後訪問判斷。緩存

固然還有好多能用到緩存的地方。springboot

6、Redis緩存原理

  Redis其實就是說把表中常常訪問的記錄放在了Redis中,而後用戶查詢時先去查詢Redis再去查詢MySQL,確實實現了讀寫分離,也就是Redis只作讀操做。因爲緩存在內存中,因此查詢會很快。app

  如何肯定在redis查詢仍是Mysql查詢:對於一個sql語句格式的數據請求,首先計算該語句的須要查詢對象的標識符,而後利用該標識符在Redis中查找該結果集。注意,結果集中的每一行都有一個相應的鍵,這些鍵都存儲在一個Redis集合結構中。若是Redis中不存在這樣一個集合,說明要找的結果集不在Redis中,因此須要執行相應的sql語句,在Mysql中查詢到相應的結果集,而後按照上面所說的辦法把結果集中的每一行以字符串或哈希的形式存入Redis。spring-boot

相關文章
相關標籤/搜索