1. 程式人生 > 其它 >redis基礎知識回顧

redis基礎知識回顧

1 redis的基本資料結構

  字串key-value最簡單的型別String、連結串列有序列表List、雜湊類似於map的一種結構Hash、集合無序集合Set、帶權值的無序集合ZSet,即每一個ZSet還有另一個數字表示權值,集合通過權值進行排序。

redis的單執行緒原理

  具體說明的是redis中只有網路模組使用了單執行緒,其他模組還是使用了多執行緒處理,其特性是是用來epoll的多路複用,所以可以採用單執行緒完成網路請求。

2 redis的備份策略

  RDB和AOF

  RDB即將當前資料生成快照並存在硬碟中,可以自動觸發,也可以手動設定。save命令是通過手動使用,使用的話需要阻塞伺服器,直到RDB過程完畢,所佔記憶體比較多。bgsave命令不阻塞主執行緒,該命令fork一個子執行緒,步驟如下:1、檢視有沒有一個子執行緒用於RDB,有的話直接返回;2、沒有的話fork一個子執行緒,此時父執行緒阻塞;3、子執行緒完成後返回一個RDB檔案給父執行緒。

  RDB自動觸發的機制:1、通過配置檔案,過一段時間後,自動執行RDB;2、如果採用主從複製過程,會自動執行RDB;3、如果redis在執行shutdown時,沒有設定AOF會自動執行RDB。

  AOF通過日誌,記錄資料的寫入或者修改操作,這種方式的實時性更好,通過配置檔案開啟AOF。

  AOF的持久化策略:1、always,每當執行一次命令將操作寫到磁碟的日誌檔案上;2、everysec,每秒將命令寫到磁碟日誌檔案上;3、no,不主動設定,由作業系統來決定什麼時候寫入到磁碟檔案上。

  AOF重寫機制:隨著時間的推移和客戶端的不斷操作,AOF檔案會變得越來越大,redis此時使用bgrewriteaof函式,在不讀取原有AOF檔案的基礎上,會重新建立一個AOF日誌檔案,減少檔案大小。

  RDB和AOF之間優缺點:1、AOF所所佔的檔案大小比RDB大;2、如果系統發生錯誤,AOF丟失的資料只有一部分,而RDB丟失所有資料;3、一般來說AOF的所需要的系統資源比RDB要小;4、RDB的恢復速度比AOF慢。

3 redis的過期策略

  定期刪除:redis預設是每過100ms,就隨機抽取一些設定過期時間的key,如果時間過期了,就會刪除,但是不會說在同一時間內刪除所有的過期的key。

  懶惰刪除:若客戶端獲取某一個key的時候,redis會先進行檢查,若該key設定了過期時間,並且已經過期了就會刪除。

4 redis快取擊穿

  主要是請求所查詢的資料,快取和資料庫中都沒有,攻擊者傳送大量的這種查詢,導致資料庫的壓力很大。

  解決方法:第一種,訪問前進行校驗。通過過濾器過濾掉那些不合法的查詢請求,布隆過濾器。第二種就是將資料庫中沒有的鍵,快取中將鍵=null

5 redis快取穿透

  主要是快取中某一熱點資料過期,快取中沒有資料,但是資料庫有資料,此時發生了大量的併發請求,導致資料庫的伺服器壓力過大。

  解決方法:熱點資料永不過期,對大量的併發讀請求設定併發鎖,降低併發性。

6 redis快取雪崩 

  主要是快取中大量的資料同時過期,快取中沒有資料,但資料庫中有資料。但是這批資料的查詢量非常大,導致資料庫壓力很大。

  解決方法:將熱點資料永不過期,設定隨機的過期時間,防止同一時間 大量資料過期。對於叢集部署的情況,將熱點資料均勻分佈在不同的伺服器。

7 布隆過濾器

  本質上是一個二進位制向量,只能存放0和1,對一個數據進行多個hash函式,將每一個函式所得出的下標的二進位制向量置為1,等待下次查詢的時候,將資料再次hash函式化,然後通過二進位制向量中是否為1,來判斷是該資料是否存在。但是有可能會發生衝突,這樣不能確定資料一定存在,但是能夠確定資料一定不存在。

  優點:查詢和插入資料的速度很快,由於是二進位制,所佔記憶體也比較少

  缺點:不能確定資料一定存在,但是能夠確定資料一定不存在。不能刪除資料,因為刪除資料會造成誤判,導致其他的資料會被誤刪除。