《Redis開發與運維》快速筆記
1.前言&基本介紹
在原始的系統架構中,我們都由程式直接連線DB,隨著業務的進一步開展,DB的壓力越來越大,為了緩解DB的這一壓力,我們引入了快取,在程式連線DB中加入快取層,
從而減輕資料庫壓力,而且快取一般存在於記憶體中,相比於存在硬碟中的 DB在讀取速度上絕對是比DB高几個等級。下面我們來簡單聊聊關於快取幾個東西
2.快取的優缺點
快取的優點就是 “快”,一個快字基本能概括了。如上文說的加速讀寫,分流對資料庫的壓力,歸根結底就是對快字的應用及其本身,缺點主要是如下三點:
1.資料不一致性:DB的資料與快取中的資料不一致
2.開發成本:需要同時處理快取層跟DB層的邏輯,增加了開發成本
3.維護成本:例如需要對快取層進行一個監控,增加了運維的成本
3.快取更新策略
在上面中我們說到資料不一致性,一般來說快取也是需要有生命週期的,需要被更新或者刪除,這樣才能保持快取的可控性,在快取更新中有如下三點:
1.LR(F)U/FIFO演算法刪除:簡單來說就是按照佇列的形式對不常用的快取進行刪除,連結串列的形式來實現,
2.超時刪除:在設定快取的時候可以設定過期時間,在時間到期之後自動刪除。在使用這個的時候,最好還是確保快取資料跟資料庫資料不一致的時候業務能容忍,還是存在一致性的問題
3.主動更新:應用於對資料一致性要求高的,但最好還是需要保證更新的準確性。假如對實時性要求不高的,還是根據超時刪除吧
4.快取粒度
假設一張使用者表有 20個欄位,那是否需要將全部欄位都放到快取中?這就涉及到一個粒度的問題!資料欄位放少了,就會出現了不通用的問題;資料欄位放多了,空間佔用也多,序列化跟反序
列化消耗的效能更多了。在粒度這個問題上還是需要根據通用性,程式碼維護,效能跟空間佔用這幾點上進行考慮, 簡單來說就是靠經驗了
5.快取穿透
快取穿透指的是查詢一個不存在的資料, DB跟快取都不會命中的資料。這樣的話每次查詢都會到DB層中查詢,DB層負載加大還有可能造成當機,這樣快取就失去了保護DB層的意義。出現這種情況有兩種:1.攻擊,爬蟲的大量請求;2.業務自身有問題。現在基本流行的解決方案有以下兩種:
5.1 快取空物件,當DB層也查不到資料的時候,快取一個null值進快取,這樣下一次的話就直接從快取中讀取,保護了後端。不過這種帶來的後果是快取了更多的鍵,需要更多的空間,而且不可控性增加
5.2布隆過濾器攔截,它利用位陣列很簡潔地表示一個集合,並能判斷一個元素是否屬於這個集合。這樣在查詢快取之前先去過濾器中查詢快取是否有存在該key。不過這個適合於資料量固定,實時性低的應用中,因為要維護這一個過濾器。
6.雪崩最佳化
指的是原先的快取層承載了大量的請求,有效的保護了 DB層,但是假如快取層炸了,那所有的請求都直接穿透到DB層,會容易造成DB層也炸了。就這個問題一直沒有一個很完美的解決方案,可以從下列兩個方面進行思考:
6.1.保證快取層的高可用(HA),例如redis的Sentinel跟Cluster都實現了高可用(在windows10下跑這個sentinel,偶爾會出現節點掛了但是sentinel沒反應過來的情況,還是linux穩定一點)
6.2.提前演練,這個類似與實驗設計,模擬某一層掛了的處理情況
7.總結
最後用 Xmind總結一下:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2888903/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《Redis開發與運維》慢查詢分析 讀書筆記Redis運維筆記
- Redis開發與運維.1.2 Redis特性Redis運維
- 《Redis開發與運維》第一章 初識Redis 讀書筆記Redis運維筆記
- 《Redis開發與運維》第二章 API的理解和使用(下)讀書筆記Redis運維API筆記
- 《Redis開發與運維》第二章 API的理解和使用(中)讀書筆記Redis運維API筆記
- 《Redis開發與運維》第二章 API的理解和使用(上)讀書筆記Redis運維API筆記
- 寫給java開發的運維筆記Java運維筆記
- 【筆記】《app後臺開發運維和架構實踐》筆記APP運維架構
- Redis開發運維的陷阱及避坑指南Redis運維
- redis持久化開發運維常見問題Redis持久化運維
- MongoDB叢集運維筆記MongoDB運維筆記
- 老凡的運維筆記 | 智慧化運維知多少?運維筆記
- Docker Swarm 日常運維命令筆記DockerSwarm運維筆記
- oracle資料庫運維筆記Oracle資料庫運維筆記
- redis cluster叢集管理工具redis-trib.rb命令小結-運維筆記Redis運維筆記
- 亞信安慧AntDB:簡化開發與運維運維
- redis運維手冊Redis運維
- 企業級Redis開發運維從入門到實踐 (1)—Redis 初識Redis運維
- 《python運維和開發實戰-高階篇》視訊課程筆記Python運維筆記
- 當開發遇到運維運維
- 開放出版:潘凡《MongoDB開發與運維實踐》MongoDB運維
- docker 快速運維命令Docker運維
- 四:GTID中的運維(筆記)運維筆記
- 《Google SRE 運維解密》讀書筆記Go運維解密筆記
- SpringBoot運維學習筆記Spring Boot運維筆記
- 《python運維和開發實戰-高階篇》視訊課程筆記二Python運維筆記
- Redis 相關運維操作Redis運維
- redis安裝和運維Redis運維
- 運維開發工程師運維工程師
- Ceph分散式儲存-運維操作筆記分散式運維筆記
- 運維筆記--debian12部署KVM運維筆記
- redis運維(三)redis6.0.8安裝Redis運維
- 什麼是運維?怎樣快速做好運維工作?運維
- 從 Java 應用部署方式看 IT 思潮——從開發和運維到開發自運維Java運維
- IT運維和自動化運維以及運維開發有啥不同?能解釋下嗎?運維
- 快速將 Promise 運用在開發中Promise
- DevOps,就是開發吃掉運維?dev運維
- Redis效能分析和運維工具Redis運維