1. 程式人生 > >最實用的 Redis總結,簡單易懂,讓你快速瞭解Redis。

最實用的 Redis總結,簡單易懂,讓你快速瞭解Redis。

  

1,redis是什麼

redis是一種支援Key-Value等多種資料結構的儲存系統。可用於快取,事件釋出或訂閱,高速佇列等場景。該資料庫使用ANSI C語言編寫,支援網路,提供字串,雜湊,列表,佇列,集合結構直接存取,基於記憶體,可持久化。

 

2.redis的應用場景有哪些

1,會話快取(最常用)

2,訊息佇列,比如支付

3,活動排行榜或計數

4,釋出,訂閱訊息(訊息通知)

5,商品列表,評論列表等

6.執行耗時特別久,且結果不頻繁變動的SQL,就特別適合將執行結果放入快取,這樣,後面的請求就去快取中讀取,請求使得能夠迅速響應。

7.在大併發的情況下,所有的請求直接訪問資料庫,資料庫會出現連線異常。這個時候,就需要使用的的Redis的做一個緩衝操作,讓請求先訪問到的Redis的的,而不是直接訪問資料庫。

 

 

3. redis常見效能問題和解決方案:

(1) Master最好不要做任何持久化工作,如RDB記憶體快照和AOF日誌檔案

(2) 如果資料比較重要,某個Slave開啟AOF備份資料,策略設定為每秒同步一次

(3) 為了主從複製的速度和連線的穩定性,Master和Slave最好在同一個區域網內

(4) 儘量避免在壓力很大的主庫上增加從庫

(5) 主從複製不要用圖狀結構,用單向連結串列結構更為穩定,即:Master <- Slave1 <- Slave2 <- Slave3…

這樣的結構方便解決單點故障問題,實現Slave對Master的替換。如果Master掛了,可以立刻啟用Slave1做Master,其他不變。

 

 

4,redis的持久化

redis持久有兩種方式:快照(快照),僅附加檔案(AOF)

快照(快照)

1,將儲存在記憶體的資料以快照的方式寫入二進位制檔案中,如預設dump.rdb中

2,儲存900 1 

#900秒內如果超過1個Key被修改,則啟動快照保 

僅附加檔案(AOF)

1,使用AOF持久時,服務會將每個收到的寫命令通過寫函式追加到檔案中(appendonly.aof)

2,AOF持久化儲存方式引數說明

    appendonly yes  

           #開啟AOF持久化儲存方式 

    appendfsync always 

         #收到寫命令後就立即寫入磁碟,效率最差,效果最好

    appendfsync everysec

         #每秒寫入磁碟一次,效率與效果居中

    appendfsync no 

         #完全依賴作業系統,效率最佳,效果沒法保證

Redis優點

 

 1,執行在記憶體,速度快官方號稱支援併發讀11萬次/s,併發寫8萬次/s,可以說是相當彪悍了。

 

2,資料雖在記憶體,但是提供了持久化的支援,即可以將記憶體中的資料非同步寫入到硬碟中,同時不影響繼續提供服務

 

3,支援資料結構豐富(string(字串),list(連結串列),set(集合),zset(sorted set - 有序集合))和Hash(雜湊型別,md5加密出來的那個串)

 

 

 

5. redis的缺點

 

一)快取和資料庫雙寫一致性問題

(二)快取雪崩問題

(三)快取擊穿問題

(四)快取的併發競爭問題

 

 

6.單執行緒的redis為什麼這麼快

 

一)純記憶體操作

(二)單執行緒操作,避免了頻繁的上下文切換

(三)採用了非阻塞I/O多路複用機制

 

 

 

7.redis的回收策略 

在redis.conf中有一行配置

 

# maxmemory-policy volatile-lru

 

該配置就是配記憶體淘汰策略的(什麼,你沒配過?好好反省一下自己) 

 

1)noeviction:當記憶體不足以容納新寫入資料時,新寫入操作會報錯。應該沒人用吧。

 

2)allkeys-lru:當記憶體不足以容納新寫入資料時,在鍵空間中,移除最近最少使用的key。推薦使用,目前專案在用這種。

 

3)allkeys-random:當記憶體不足以容納新寫入資料時,在鍵空間中,隨機移除某個key。應該也沒人用吧,你不刪最少使用Key,去隨機刪。

 

4)volatile-lru:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,移除最近最少使用的key。這種情況一般是把redis既當快取,又做持久化儲存的時候才用。不推薦

 

5)volatile-random:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,隨機移除某個key。依然不推薦

 

6)volatile-ttl:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,有更早過期時間的key優先移除。不推薦

 

ps:如果沒有設定 expire 的key, 不滿足先決條件(prerequisites); 那麼 volatile-lru, volatile-random 和 volatile-ttl 策略的行為, 和 noeviction(不刪除) 基本上一致。