fifo:first in first out,先進先出。判斷被儲存的時間,離目前最遠的資料優先被淘汰。
lru:least recently used,最近最少使用。判斷最近被使用的時間,目前最遠的資料優先被淘汰。
lfu:least frequently used,最不經常使用。在一段時間內,資料被使用次數最少的,優先被淘汰。
方案一: 先更新資料庫,在刪除快取,刪除失敗則重試。
流程如下所示(1)更新資料庫資料;(2)快取因為種種問題刪除失敗(3)將需要刪除的key傳送至訊息佇列(4)自己消費訊息,獲得需要刪除的key(5)繼續重試刪除操作,直到成功然而,該方案有乙個缺點,對業務線**造成大量的侵入。
方案二,在方案二中,啟動乙個訂閱程式去訂閱資料庫的binlog,獲得需要操作的資料。在應用程式中,另起一段程式,獲得這個訂閱程式傳來的資訊,進行刪除快取操作。
快取穿透,是指查詢乙個資料庫一定不存在的資料。
正常的使用快取流程大致是,資料查詢先進行快取查詢,如果key不存在或者key已經過期,再對資料庫進行查詢,並把查詢到的物件,放進快取。如果資料庫查詢物件為空,則不放進快取。
解決方案:
介面層增加校驗,如使用者鑑權校驗,id做基礎校驗,id<=0的直接攔截;
從快取取不到的資料,在資料庫中也沒有取到,這時也可以將key-value對寫為key-null,快取有效時間可以設定短點,如30秒(設定太長會導致正常情況也沒法使用)。這樣可以防止攻擊使用者反覆用同乙個id暴力攻擊
布隆過濾器攔截不存在的資料的請求。
是指乙個key非常熱點,在不停的扛著大併發,大併發集中對這乙個點進行訪問,當這個key在失效的瞬間,持續的大併發就穿破快取,直接請求資料庫,就像在乙個屏障上鑿開了乙個洞。
解決方案:
設定熱點資料永遠不過期。
加分布式互斥鎖,單執行緒查詢資料庫。
快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。和快取擊穿不同的是, 快取擊穿指併發查同一條資料,快取雪崩是不同資料都過期了,很多資料都查不到從而查資料庫。
解決方案:
快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。
如果快取資料庫是分布式部署,將熱點資料均勻分布在不同快取資料庫中。
設定熱點資料永遠不過期。
其實集中過期,倒不是非常致命,比較致命的快取雪崩,是快取伺服器某個節點宕機或斷網。因為自然形成的快取雪崩,一定是在某個時間段集中建立快取,這個時候,資料庫也是可以頂住壓力的。無非就是對資料庫產生週期性的壓力而已。而快取服務節點的宕機,對資料庫伺服器造成的壓力是不可預知的,很有可能瞬間就把資料庫壓垮。
快取使用備份,防止快取伺服器宕機。
雙機房備災,防止機房整個宕機。
布隆過濾器的原理是,當乙個元素被加入集合時,通過k個hash函式將這個元素對映成乙個位陣列中的k個點,把它們置為1。檢索時,我們只要看看這些點是不是都是1就(大約)知道集合中有沒有它了:如果這些點有任何乙個0,則被檢元素一定不在;如果都是1,則被檢元素很可能在。這就是布隆過濾器的基本思想。
Redis知識點總結
介紹 redis是單執行緒 底層使用多路io復用 持久化方式 如何保證快速並完整的恢復資料 redis 4.0以後可以混合持久化 以rdb的方式全量持久化記憶體資料保證資料恢復並以增量的方式持久化修改命令保證資料完整性 最終以rdb和aof共存的方式寫入檔案 redis實現分布式鎖 在redis中設...
Redis知識點總結
當然如果只是將少量資料儲存作為快取並且沒有持久化的需求,那麼完全可以用map做快取。redis相較於語言的對映的優勢 redis 可以用幾十 g 記憶體來做快取,map 不行,一般 jvm 也就分幾個 g 資料就夠大了。redis 的快取可以持久化,map 是記憶體物件,程式一重啟資料就沒了。red...
Redis必會知識點總結
redis是完全開源的,遵守bsd協議,是乙個高效能的key value資料庫。redis與其他key value快取產品有以下三個特點 redis支援的資料型別?什麼是redis持久化?redis有哪幾種持久化方式?優缺點是什麼?redis有哪些架構模式?講講各自的特點 使用過redis分布式鎖嗎...