簡單了解Redis

2022-08-24 00:45:12 字數 1603 閱讀 2988

redis是一種支援key-value等多種資料結構的儲存系統,可用於快取,事件發布,訊息佇列等場景,支援多種資料型別

string、hash、list、set、zset。而且基於記憶體,可持久化,並且能夠通過sentinel哨兵和自動分割槽cluster實現高可用。

補充:redis中list集合是雙端迴圈列表(雙向列表),可以當作佇列使用,也能當作堆疊使用。

redis的持久化策略有兩種:

rdb模式:定期將記憶體中的資料進行持久化,實際上就是為記憶體做快照,備份速度快,但有可能會丟失少量的資料。

aof模式:可以實時備份,安全性更好,但持久化速度較慢,aof持久化檔案的體積很大,資料恢復時需要耗費大量時間。

rdb模式是預設開啟的,若兩種模式同時開啟優先採用aof模式。

使用分片可以實現記憶體資料的動態擴容,每台redis節點中盡可能儲存1/n的資料量,防止資料丟失。

缺點是若有一台機器宕機,則整個分片將不能正常執行。

分片中採用的hash一致性演算法:

資料如何儲存:

1.將節點的ip + 演算法確定唯一雜湊值,之後在記憶體中確定節點的位置

2.儲存資料時,根據key進行hash運算,確定唯一位置

3.根據當前key的位置順時針查詢最近的node節點進行掛載

該演算法的特性: 均衡性:引入虛擬節點,讓資料均勻分片

單調性:如果node節點新增,能動態實現資料的遷移

分散性:資料分布在各個節點(解決方案:一般在進行架構設計時,為了避免資料的分散,會要求使用全部的記憶體空間)

原理:通過哨兵監控主機的狀態,獲取主機和叢機的資訊,通過心跳檢測機制,如果3次連線沒有響應,則會斷定主機宕機,哨兵會從叢機當中選舉一台充當主機,

舊的主機修復完成後,會充當叢機等待下次選舉。

腦裂: 因為選舉機制投票平票導致出現多台主機稱之為腦裂。

解決方案:增加節點的個數。

快取穿透: 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,我們資料庫的 id 都是1開始自增上去的,如發起為id值為 -1 的資料或 id 為特別大不存在的資料。

這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過大,嚴重會擊垮資料庫。

解決方案: 利用互斥鎖,快取失效時,先去獲取鎖,得到鎖之後再去請求資料庫,沒有得到鎖的就休眠一段時間。

redis還有乙個高階用法布隆過濾器(bloom filter)這個也能很好的防止快取穿透的發生,他的原理也很簡單就是利用高效的資料結構和演算法快速判斷出你這個

key是否在資料庫中存在,不存在你return就好了,存在你就去查了db重新整理kv再return。

快取雪崩:在高併發下,大量的快取key在同一時間失效,導致大量的請求落到資料庫上,如活動系統裡面同時進行著非常多的活動,但是在某個時間點所有的活動快取全部過期。

快取擊穿:快取擊穿是指乙個key,在不停的扛著大併發,大併發集中對這乙個點進行訪問,當這個key在失效的瞬間,持續的大併發就穿破快取,直接請求資料庫,就像在乙個完好無損的桶上鑿開了乙個洞。

解決方案:設定資料永遠不過期。或者加上互斥鎖就能搞定了,或者做快取預熱。

redis簡單了解

redis 是單程序程式 redis與memcache對比 1 redis能夠用不同的兩種方式將資料寫入磁碟 時間點轉儲即快照 只追加檔案aof,將所有修改了資料庫的命令都寫入乙個只追加檔案裡面,使用者可以根據資料的重要程度,將只 追加寫入設定為從不同步 每秒同步一次或者每寫入乙個命令就同步一次 2...

簡單了解Redis

什麼是redis?redis是乙個開源的使用ansi c語言編寫 支援網路 可基於記憶體亦可持久化的日誌型 key value資料庫,並提供多種語言的api。redis有哪些優點?1 支援多種資料型別。常見的 string 字串 list 列表 hash 雜湊 sets 集合 sorted set ...

redis事務的簡單了解

redis對事務的支援目前還比較簡單。redis只能保證乙個client發起的事務中的命令可以連續的執行,而中間不會插入其他client的命令。由於redis是單執行緒來處理所有client的請求的所以做到這點是很容易的。一般情況下redis在接受到乙個client發來的命令後會立即處理並 返回處理...