快取穿透是指查詢乙個資料庫一定不存在的資料。
我們以前正常的使用redis快取的流程大致是:
1、資料查詢首先進行快取查詢
2、如果資料存在則直接返回快取資料
3、如果資料不存在,就對資料庫進行查詢,並把查詢到的資料放進快取
4、如果資料庫查詢資料為空,則不放進快取
例如我們的資料表中主鍵是自增產生的,所有的主鍵值都大於0。此時如果使用者傳入的引數為-1,會是
怎麼樣?這個-1,就是一定不存在的物件。程式就會每次都去查詢資料庫,而每次查詢都是空,每次又
都不會進行快取。假如有人惡意攻擊,就可以利用這個漏洞,對資料庫造成壓力,甚至壓垮我們的資料
庫。為了防止有人利用這個漏洞惡意攻擊我們的資料庫,我們可以採取如下措施:
如果從資料庫查詢的物件為空,也放入快取,key為使用者提交過來的主鍵值,value為null,只是設定的
快取過期時間較短,比如設定為60秒。這樣下次使用者再根據這個key查詢redis快取就可以查詢到值了
(當然值為null),從而保護我們的資料庫免遭攻擊。
快取雪崩,是指在某乙個時間段,快取集中過期失效。在快取集中失效的這個時間段對資料的訪問查
詢,都落到了資料庫上,對於資料庫而言,就會產生週期性的壓力波峰。
為了避免快取雪崩的發生,我們可以將快取的資料設定不同的失效時間,這樣就可以避免快取資料在某
個時間段集中失效。例如對於熱門的資料(訪問頻率高的資料)可以快取的時間長一些,對於冷門的數
據可以快取的時間段一些。甚至對於一些特別熱門的資料可以設定永不過期。
快取擊穿,是指乙個key非常熱點(例如雙十一期間進行搶購的商品資料),在不停的扛著大併發,大
併發集中對這乙個點進行訪問,當這個key在失效的瞬間,持續的大併發就穿破快取,直接請求到資料
庫上,就像在乙個屏障上鑿開了乙個洞。
我們同樣可以將這些熱點資料設定永不過期就可以解決快取擊穿的問題了。
Redis快取穿透 快取雪崩問題
穿透雪崩主要是因為查詢資料庫造成的,那麼讀寫分離,快取資料查詢失敗不去查資料庫就好了。查的時候有即是有,無即是無,不會再查資料庫,快取的穿透和雪崩問題就不存在了。其次新增資料庫和快取同步功能,保證資料庫和快取資料是一致的即可 需要注意的是這時候資料庫資料是有限和相對穩定的,其實如果是海量資料同時放入...
快取 redis 快取穿透
哪一些因素 考慮使用redis,畢竟 redis 也要增加成本 1 熱點資料 2 讀的成本非常大 3 讀多寫少 4 對資料一致性要求 沒有那麼嚴格 可以出現資料與資料庫不一致 1 秒殺場景 3 物流查詢軌跡 熱點資料 啟用的資料是被快取到redis 當中 快取key 乙個時間點過期的時候,如果快取資...
Redis 快取雪崩和快取穿透問題
快取雪崩 簡介 快取同一時間大面積的失效 熱點資料同時過期失效或者宕機 所以,後面的請求都會落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。如果快取因某種原因發生了宕機,那麼原本被快取抵擋的海量查詢請求就會像瘋狗一樣湧向資料庫。此時資料庫如果抵擋不了這巨大的壓力,它就會崩潰 解決辦法 選擇合適的...