IT|資料庫|Key-Value|Redis 在 Spring Boot 實現緩存操作

緩存的應用場景

[什麼是緩存?]
在互聯網場景下,尤其2C端產品(比如社交類的微信,手機類的小米. 這類產品的開發)在大流量場景下,需要將一些經常展現和不會頻繁變更的數據,存放在存取速率更快的地方。
 
緩存就是一個存儲器,在技術選型中,常用Redis作為緩存資料庫。緩存主要是在獲取資源方便性能優化的關鍵方面。Redis是一個高性能的key-value 資料庫。
 
[緩存的應用場景有哪些呢?]
比如常見的電商場景,根據商品ID獲取商品信息時,店鋪信息和商品詳情信息就可以緩存在Redis,直接從Redis獲取。減少了去數據庫查詢的次數。但會出現新的問題,就是如何對緩存進行更新?
 
大致流程如下:
獲取商品詳情舉例
a. 從商品 Cache 中獲取商品詳情,如果存在,則返回獲取 Cache 資料返回。
b. 如果不存在,則從商品 DB 中獲取。獲取成功後,將資料存到 Cache 中。則下次獲取商品詳情,就可以從 Cache 就可以得到商品詳情資料。
c. 從商品 DB 中更新或者刪除商品詳情成功後,則從緩存中刪除對應商品的詳情緩存

 
更新缓存的策略

參考《緩存更新的套路》,緩存更新的模式有四種:
1、Cache aside
2、Read through
3、Write through
4、Write behind caching
 
這裡使用的是 「Cache Aside」 策略,此策略可從三個維度來說明:
失效:應用程序先從cache取數據,沒有得到,則從數據庫中取數據,成功後,放到緩存中。
命中:應用程序從cache中取數據,取到後返回。
更新:先把數據存到數據庫中,成功後,再讓緩存失效
 
實作

[執行環境]
Mac OS 10.12.x
JDK 8 +
Redis 3.2.8
Spring Boot 1.5.1.RELEASE
 
 
程式相關說明:
* @comment 首先這裡注入了 RedisTemplate 對象。
* 聯想到 Spring 的 JdbcTemplate ,RedisTemplate 封裝了 RedisConnection,具有連接管理,序列化和 Redis 操作等功能。
* 還有針對 String 的支持對象 StringRedisTemplate。
* Redis 操作視圖接口類用的是 ValueOperations,對應的是 Redis String/Value 操作。
* 還有其他的操作視圖,ListOperations、SetOperations、ZSetOperations 和 HashOperations 。ValueOperations
* 插入緩存是可以設置失效時間,這裡設置的失效時間是 10 s。
 
 
* 1.建立資料庫
    CREATE DATABASE springbootdb;
* 2.建立資料表
   DROP TABLE IF EXISTS  `city`;
   CREATE TABLE `city` (
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '城市编号',
   `province_id` int(10) unsigned  NOT NULL COMMENT '省份编号',
   `city_name` varchar(25) DEFAULT NULL COMMENT '城市名称',
   `description` varchar(25) DEFAULT NULL COMMENT '描述',
   PRIMARY KEY (`id`)
   ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
* 3.插入數據
    INSERT city VALUES (1 ,1,'新北市','BY ERRUI 的家在新北市');
   4.根據 ID,獲取城市信息
   GET http://127.0.0.1:8080/api/city/1
   5.更新程式信息
   PUT http://127.0.0.1:8080/api/city
   6.刪除程式信息
   DELETE http://127.0.0.1:8080/api/city/2
 
大功告成!

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *