# :-: Redis緩存
## 為什么需要緩存
* 對于數據庫改動很少的數據,高頻次的調用,會徒增數據庫的壓力。
* 從緩存中獲取數據,比直接訪問數據庫獲取要快很多。
* 直接訪問一個已經存在的對象,要比從數據創建一個對象快。
* 緩存的架構發展很迅速,從本地緩存 到 集群緩存 再到 分布式緩存(數據網格)。
* 分布式系統一般會有一級緩存、二級緩存、要求更高些的會有三級緩存。
* 但要用好緩存并不是那么簡單,我們還需要具有緩存穿透、緩存雪崩對應的解決方案。
* 本章只講述Spring下使用緩存的方法,后續運維工程師可根據系統的實際業務情況來采用不同的緩存架構。
## 小提示
我們可以使用 Redis可視化工具`Redis Desktop Manager`來實時查看`redis`的使用情況
## 代碼示例
### 添加讀取緩存
~~~
@GetMapping("info")
@PreAuth("hasRole('administrator')")
@Cacheable(cacheNames = "demo-info", key = "#name")
public R<String> info(String name) {
log.info("本條信息沒有從緩存獲取");
return R.data("Hello, My Name Is: " + name);
}
~~~
### 調用接口驗證
1. 首先查看`Redis Desktop Manager`,是沒有緩存的鍵值的

2. 調用接口并查看控制臺,發現如下日志

3. 查看`Redis Desktop Manager`,發現多了一個鍵值,正是我們設置的

4. 再次調用接口,發現控制臺再無日志輸出,說明第二次以后的請求,緩存都從Redis取了。

5. 當低頻更新的數據發生了變更,那么隨之與他相關的緩存也需要刪除,所以我們來看下移除緩存的寫法。
### 移除緩存
~~~
@GetMapping("remove-info")
@PreAuth("hasRole('administrator')")
@CacheEvict(cacheNames = "demo-info", key = "#name")
public R<String> removeInfo(String name) {
return R.success("刪除緩存成功");
}
~~~
### 調用接口驗證
1. 調用接口,并查看返回結果為`刪除緩存成功`
演示圖待放。。。。
2. 查看`Redis Desktop Manager`,發現緩存被移除
演示圖待放。。。。
3. 再次調用`info`接口,發現又如一開始,控制臺打印了日志,并且Redis增加了鍵值
演示圖待放。。。。
## 結尾語
好了,簡單的緩存概念及其使用已經講解完畢,更深一層的,我們可以查閱Spring的官方文檔進行深入學習。
官方文檔直達:[https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache](https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache)
- 序
- 快速開始
- 環境要求
- 環境準備
- 工程導入
- 工程運行
- 技術基礎
- Java8
- Lambda
- Lambda 受檢異常處理
- Stream 簡介
- Stream API 一覽
- Stream API(上)
- Stream API(下)
- Optional 干掉空指針
- 函數式接口
- 新的日期 API
- Lombok
- SpringMVC
- Swagger
- Mybaties
- Mybaties-plus
- 開發初探
- 新建微服務工程
- 第一個API
- API鑒權
- API響應結果
- Redis 緩存
- 第一個CRUD
- 建表
- 建Entity
- 建Service和Mapper
- 新增API
- 修改API
- 刪除API
- 查詢API
- 單條查詢
- 多條查詢
- 分頁
- 微服務遠程調用
- 聲明式服務調用Feign
- 熔斷機制 Hystrix
- 開發進階