>[success] **緩存數據分層**
>
熱頻數據
冷頻數據
>[success]**緩存問題**
>>**緩存穿透**: 緩存穿透是指查詢的key不存在,從而緩存查詢不到而查詢了數據庫。若是這樣的key恰好并發請求很大,那么就會對數據庫造成不必要的壓力。比如黑客用一堆不存在的key訪問數據,大量請求發送到數據庫,數據庫壓力過大而宕機.
>>>>[danger]解決方法:
1、把所有存在的key都存到另外一個存儲的Set集合里,查詢時可以先查詢key是否存在;
2、將這些key對應的值設置為null 丟到緩存里面去。后面再出現查詢這個key 的請求的時候,直接返回null,再根據業務需求設置過期時間。
3、BloomFilter 類似于一個hbase set 用來判斷某個元素(key)是否存在于某個集合中。這種方式在大數據場景應用比較多,比如 Hbase 中使用它去判斷數據是否在磁盤上。這種方案可以加在第1/2種方案中,在緩存之前加一層 BloomFilter ,在查詢的時候先去 BloomFilter 去查詢 key 是否存在,如果不存在就直接返回,存在再走查緩存 -> 查 DB。
>>**緩存擊穿**
在高并發的系統中,大量的請求同時查詢一個 key 時,這個key剛好失效了,就會導致大量的請求都打到數據庫上面去。這種現象我們稱為緩存擊穿。
>>>>[danger]解決方法:在第一個查詢數據的請求上使用一個 互斥鎖。其他的線程進入等待狀態,等第一個線程查詢到了數據,然后做緩存。后面的線程進來發現已經有緩存了,就直接走緩存。
>[success]緩存設計思考
制定緩存策略
區分緩存數據
避免緩存問題
- 序言
- 為什么要編碼規范?
- 如何進行編碼規范?
- 編碼規范宏觀微觀細節
- PHP編碼規范
- 基礎規范
- 1 語法規范
- 2 變量命名規范
- 3 常量命名規范
- 4 類命名規范
- 5 函數命名規范
- 6 方法命名規范
- PSR-規范
- 基本代碼規范
- Tp項目規范
- TP命名規范
- Tp目錄規范
- Tp基礎目錄構架
- Tp項目開發思考
- Tp控制器規范
- 控制器構架
- Tp模型規范
- 模型性能優化
- Tp業務規范
- 返回結構規范
- 業務異常規范
- Tp輸出規范
- Restful API
- 模板渲染輸出
- Tp異常規范
- 異常碼狀態碼
- 異常輸出方式
- Tp驗證規范
- Tp路由規范
- Tp加密規范
- Password Hashing
- Tp緩存規范
- 常見數據緩存
- 緩存設計思考
- Tp日志規范
- 日志信息
- 日志分析
- Tp日志接管分析
- Tp性能優化
- vendor包規范
- 項目自動化思考
- 項目檢測告警思考
- 項目注釋規范
- Mysql設計規范
- 序言
- 命名規范
- 表及字段規范
- 索引規范
- 索引原理
- Sql規范
- 事務規范
- 讀寫分離
- 樂觀鎖悲觀鎖
- 數據庫審計
- 性能優化
- 查詢優化神器
- 慢查詢優化步驟
- 分庫分表、分區表
- 根據sql日志篩選數據
- 設計原則
- MongoDB規范
- MongoDB基礎
- MongoDB設計
- MongoDB安全性
- MongoDB備份
- 操作手冊規范
- API文檔說明規范
- 管理端操作手冊
- 用戶使用說明書
- 溯源項目構想