iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 20
1
自我挑戰組

資訊技術解戈迪安繩結系列 第 19

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

緩存的應用場景


[什麼是緩存?]
在互聯網場景下,尤其 2C 端產品(比如社交類的微信,手機類的小米. 這類產品的開發)在大流量場景下,需要將一些經常展現和不會頻繁變更的數據,存放在存取速率更快的地方。

緩存就是一個存儲器,在技術選型中,常用 Redis 作為緩存資料庫。緩存主要是在獲取資源方便性能優化的關鍵方面。Redis 是一個高性能的 key-value 資料庫。

[緩存的應用場景有哪些呢?]
比如常見的電商場景,根據商品 ID 獲取商品信息時,店鋪信息和商品詳情信息就可以緩存在 Redis,直接從 Redis 獲取。減少了去數據庫查詢的次數。但會出現新的問題,就是如何對緩存進行更新?

大致流程如下:
獲取商品詳情舉例
a. 從商品 Cache 中獲取商品詳情,如果存在,則返回獲取 Cache 資料返回。
b. 如果不存在,則從商品 DB 中獲取。獲取成功後,將資料存到 Cache 中。則下次獲取商品詳情,就可以從 Cache 就可以得到商品詳情資料。
c. 從商品 DB 中更新或者刪除商品詳情成功後,則從緩存中刪除對應商品的詳情緩存
https://ithelp.ithome.com.tw/upload/images/20171227/20107621JilIvVKKD9.png

更新缓存的策略


參考《緩存更新的套路》,緩存更新的模式有四種:
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

程式碼下載(github):https://github.com/ntausr4/Test-Tech-SpringBoot-mybatis-Redis

程式相關說明:

* @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

大功告成!


上一篇
IT|資料庫|PostgreSQL 在同一台主機執行多個實例
下一篇
IT|軟體|測試|JMeter 自動生成測試報告
系列文
資訊技術解戈迪安繩結29

尚未有邦友留言

立即登入留言