redis快取的使用極大的提公升了應用程式的效能和效率,特別是資料查詢方面,但同時,它也帶來了一些問題。其中,最要害的問題,就是一些資料的一致性問題,從嚴格意義上講,這個問題不好解決。如果對資料的一致性要求很高,那麼不能是用快取。
另外的問題就是快取穿透,快取雪崩和快取擊穿。
快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為「-1」的資料或id為特別大不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過大。解決方案
1、當資料庫也查不到時,可以在快取中存乙個空物件,但這個存在弊端,可能在快取中會存在大量的值為空的鍵
2、布隆過濾器:布隆過濾器是一種資料結構,對所有可能查詢的引數以hash形式儲存,在控制層先進行校驗,不符合規則的直接丟棄,從而避免了底層儲存系統的查詢壓力。
快取穿透和快取擊穿的區別:快取擊穿是指乙個key非常熱點,在不停的扛著大併發,大併發集中對這乙個點進行訪問,當這個key在失效的瞬間,持續的大併發就擊破快取,直接請求資料庫。導致資料庫的壓力過大,資料庫可能因此宕機。解決方案
1、設定熱點資料永不過期
2、加互斥鎖:可以利用redis來進行分布式鎖(setnx)來保證同時只有乙個執行緒去查詢後端服務,其他執行緒沒有獲得分布式鎖的許可權,因此只需要等待即可,這種方式將高併發的壓力轉移到了分布式鎖上,因此對分布式鎖的考驗很大。
快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。和快取擊穿不同的是, 快取擊穿指併發查同一條資料,快取雪崩是不同資料都過期了,很多資料都查不到從而查資料庫。解決方案
1、高併發情況下,可以停掉一些次要的服務,保證熱點的服務扛過當前的高峰期
2、保證快取服務高可用,設定redis集群
3、避免快取集中失效,不同的key設定不同的超時時間
Redis快取失效問題
redis作為記憶體資料庫,其資料總會有失效的時候,資料失效引起的問題主要有三個 key對應的資料在資料來源並不存在,每次針對此key的請求從快取獲取不到,請求都會到資料來源,從而可能壓垮資料來源。比如用乙個不存在的使用者id獲取使用者資訊,不論快取還是資料庫都沒有,若黑客利用此漏洞進行攻擊可能壓垮...
redis的快取穿透 快取併發 快取失效
學習 截選乙個集體快取失效解決辦法 引起這個問題的主要原因還是高併發的時候,平時我們設定乙個快取的過期時間時,可能有一些會設定1分鐘啊,5分鐘這些,併發很高時可能會出在某乙個時間同時生成了很多的快取,並且過期時間都一樣,這個時候就可能引發一當過期時間到後,這些快取同時失效,請求全部 到db,db可能...
Redis快取擊穿,失效以及維度劃分
一 redis快取快取的使用場景基本包含如下兩種 1 開銷大的複雜計算 以mysql為例子,一些複雜的操作或者計算 例如大量聯表操作 一些分組計 算 如果不加快取,不但無法滿足高併發量,同時也會給mysql帶來巨大的負擔。2 加速請求響應 即使查詢單條後端資料足夠快 例如select from ta...