Redis 快取的收益和成本

2022-06-18 04:51:08 字數 1486 閱讀 2887

高速讀寫。

降低後端負載:後端伺服器通過前端快取降低負載;業務端使用 redis 降低後端 mysql 負載等。

資料不一致。快取層和資料層有時間視窗不一致,和更新策略有關。

**維護成本。原本只需要讀寫 mysql 就能實現功能,但加入了快取之後就要去維護快取的資料,增加了**複雜度。

堆內快取可能帶來記憶體溢位的風險影響使用者程序,如 ehcache、loadingcache。

堆內快取一般效能更好,遠端快取需要套接字傳輸。

使用者級別快取盡量採用遠端快取。

大資料量盡量採用遠端快取,服務節點化原則。

如果快取集中在一段時間內失效,發生大量的快取穿透,所有的查詢都落在資料庫上,造成了快取雪崩。

由於原有快取失效,新快取未到期間所有原本應該訪問快取的請求都去查詢資料庫了,而對資料庫 cpu 和記憶體造成巨大壓力,嚴重的會造成資料庫宕機。

mutex 互斥鎖解決,redis 的 setnx 去 set 乙個 mutex key,當操作返回成功時,再進行 load db 的操作並回設快取;否則,就重試整個 get 快取的方法。

快取預熱就是系統上線後,將相關的快取資料直接載入到快取系統。這樣就可以避免在使用者請求的時候,先查詢資料庫,然後再將資料快取的問題。

使用者直接查詢事先被預熱的快取資料,可以通過快取 reload 機制,預先去更新快取,再即將發生大併發訪問前手動觸發載入快取不同的 key。

c1 為原始快取,c2 為拷貝快取,c1 失效時,可以訪問 c2,c1 快取失效時間設定為短期,c2 設定為長期。

時效性要求不高的快取,容器啟動初始化載入,採用定時任務更新或移除快取。

讓快取失效的時間點盡量均勻

快取穿透是指使用者查詢資料,在資料庫沒有,自然在快取中也不會有。這樣就導致使用者查詢的時候,在快取中找不到對應 key 的 value,每次都要去資料庫再查詢一遍,然後返回空(相當於進行了兩次無用的查詢)。這樣請求就繞過快取直接查資料庫。

如果乙個查詢返回的資料為空(不管是資料不存在,還是系統故障)我們仍然把這個空結果進行快取,但它的過期時間會很短,最長不超過五分鐘。 通過這個直接設定的預設值存放到快取,這樣第二次到緩衝中獲取就有值了,而不會繼續訪問資料庫

將所有可能存在的資料雜湊到乙個足夠大的 bitmap 中,乙個一定不存在的資料會被這個 bitmap 攔截掉,從而避免了對底層儲存系統的查詢壓力。優勢占用記憶體空間很小,bit 儲存。效能特別高。 

豐富的資料型別

可用於快取,訊息按key設定過期時間,過期後自動刪除 setex set expire 時間

支援持久化方式 rdb 和 aof

主從分布式,redis 支援主從支援讀寫分離 redis cluster,動態擴容方式

用 sorted set 實現過排行榜專案

用過期 key 結合 spring boot cache 實現過快取儲存

redis 實現分布式環境 seesion 共享

用布隆過濾器解決過快取穿透

redis 實現分布式鎖

redis 實現訂單重推系統

快取的收益和成本以及程序快取講解

快取是什麼?起源於cpu,原始意義是指訪問速度 般隨機訪問儲存器 ram 快的 種ram,通常它 不像系統主存那樣使 dram技術,使 昂貴但較快速的sram技術 快取類別 cpu l1 l2 l3 cache linux page cache加速硬碟讀寫 瀏覽器快取 堆內快取 程序快取 分布式緩 ...

再談敏捷開發 從成本到收益的優化

敏捷開發 的種種優點時常被專案經理提及,但真正在專案中採用敏捷開發的卻很少。這裡分析敏捷開發的優點,將告訴您採用敏捷的專案如何從成本到收益得到好處。高效地開發出有品質的軟體對各個行業的企業都是至關重要的,對終端使用者尤為重要。軟體企業不再能忍受18個月的產品週期,它們正在尋求各種方式變得更加靈活和多...

再談快取和Redis

自從上次分享 redis到底該如何利用?已經有1年多了,這1年經歷了不少。從碼了我們 的第一行開始到現在,我們的快取模組也不斷在公升級,這之中確實略有心得,最近也有朋友 快取,覺得可以總結下分享下拙見,期待能有更深入的研究。快取是什麼?我時常在群裡或者在社群裡看到有人對快取有諸多疑問,搞不清快取的用...