Redis知識點總結

2022-07-03 10:42:19 字數 2116 閱讀 7303

當然如果只是將少量資料儲存作為快取並且沒有持久化的需求,那麼完全可以用map做快取。

redis相較於語言的對映的優勢:

redis 可以用幾十 g 記憶體來做快取,map 不行,一般 jvm 也就分幾個 g 資料就夠大了。

redis 的快取可以持久化,map 是記憶體物件,程式一重啟資料就沒了。

redis 可以實現分布式的快取,各個例項共用乙份快取資料,map 只能存在建立它的程式裡,不具有一致性。

redis 可以處理每秒百萬級的併發,是專業的快取服務,map 只是乙個普通的物件。

redis 快取有過期機制,map 本身無此功能。

redis 有豐富的 api,map 就簡單太多了。

redis 是c語言寫的,穩定性和效能更好。

參考回答

aof檔案比rdb更新頻率高,優先使用aof還原資料。

aof比rdb更安全也更大

rdb效能比aof好

如果兩個都配了優先載入aof

參考部落格

參考部落格

集群(**型)

算是上面哨兵+主從複製的優化形式,通過乙個**節點來分發命令,實現均衡負載,資料的分片之類的。彌補了上面主伺服器寫壓力大的問題。但是需要維護**伺服器。

集群(直連型)

沒有**,無中心結構,所有節點一起儲存整個資料庫,每個節點負責資料庫的一段,各自協調。優點是:

缺點是資源隔離性差,資料非同步複製,不好保證其一致性。

如何保證當系統的節點數目發生變化時仍然能夠對外提供良好的服務,這是值得考慮的,尤其實在設計分布式快取系統時,如果某台伺服器失效,對於整個系統來說如果不採用合適的演算法來保證一致性,那麼快取於系統中的所有資料都可能會失效(即由於系統節點數目變少,客戶端在請求某一物件時需要重新計算其hash值(通常與系統中的節點數目有關),由於hash值已經改變,所以很可能找不到儲存該物件的伺服器節點),因此一致性hash就顯得至關重要。

參考部落格

redis 集群中內建了 16384 個雜湊槽,當需要在 redis 集群中放置乙個 key-value時,redis 先對 key 使用 crc16 演算法算出乙個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應乙個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點。

在集群節點分片的時候,就會將所有 16384 個雜湊槽分配到各個節點中。

參考部落格

參考部落格

分布式鎖:多機資料庫下,當多個程序不在同乙個系統中,用分布式鎖控制多個程序對資源的訪問。

先拿setnx來爭搶鎖,搶到之後,再用expire給鎖加乙個過期時間防止鎖忘記了釋放。

如果在setnx之後執行expire之前程序意外crash或者要重啟維護了,那會怎麼樣?

set指令有非常複雜的引數,這個應該是可以同時把setnx和expire合成一條指令來用的!

參考部落格

參考部落格

一般使用list結構作為佇列,rpush生產訊息,lpop消費訊息。當lpop沒有訊息的時候,要適當sleep一會再重試。

缺點是,在消費者下線的情況下,生產的訊息會丟失,得使用專業的訊息佇列如rabbitmq等。

利用發布訂閱模式,可以實現生產一次,消費多次。

快取穿透:一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢(比如db)。一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。

解決方法:

對查詢結果為空的情況也進行快取,快取時間設定短一點,或者該key對應的資料insert了之後清理快取。

對一定不存在的key進行過濾。可以把所有的可能存在的key放到乙個大的bitmap中,查詢時通過該bitmap過濾。

什麼是bitmap?

參考部落格

快取雪崩:當快取伺服器重啟或者大量快取集中在某乙個時間段失效,這樣在失效的時候,會給後端系統帶來很大壓力。導致系統崩潰。

解決方法:

在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許乙個執行緒查詢資料和寫快取,其他執行緒等待。

做二級快取,a1為原始快取,a2為拷貝快取,a1失效時,可以訪問a2,a1快取失效時間設定為短期,a2設定為長期。

不同的key,設定不同的過期時間,讓快取失效的時間點盡量均勻。

Redis知識點總結

fifo first in first out,先進先出。判斷被儲存的時間,離目前最遠的資料優先被淘汰。lru least recently used,最近最少使用。判斷最近被使用的時間,目前最遠的資料優先被淘汰。lfu least frequently used,最不經常使用。在一段時間內,資料被...

Redis知識點總結

介紹 redis是單執行緒 底層使用多路io復用 持久化方式 如何保證快速並完整的恢復資料 redis 4.0以後可以混合持久化 以rdb的方式全量持久化記憶體資料保證資料恢復並以增量的方式持久化修改命令保證資料完整性 最終以rdb和aof共存的方式寫入檔案 redis實現分布式鎖 在redis中設...

Redis必會知識點總結

redis是完全開源的,遵守bsd協議,是乙個高效能的key value資料庫。redis與其他key value快取產品有以下三個特點 redis支援的資料型別?什麼是redis持久化?redis有哪幾種持久化方式?優缺點是什麼?redis有哪些架構模式?講講各自的特點 使用過redis分布式鎖嗎...