1. 程式人生 > >The Little Redis Book中文版 第五章

The Little Redis Book中文版 第五章

在最後一章裡,我們將集中談論Redis執行中的一些管理方面內容。這是一個不完整的Redis管理指南,我們將會回答一些基本的問題,初接觸Redis的新使用者可能會很感興趣。

配置(Configuration)

當你第一次執行Redis的伺服器,它會向你顯示一個警告,指redis.conf檔案沒有被找到。這個檔案可以被用來配置Redis的各個方面。一個充分定義(well-documented)的redis.conf檔案對各個版本的Redis都有效。範例檔案包含了預設的配置選項,因此,對於想要了解設定在幹什麼,或預設設定是什麼,都會很有用。你可以在https://github.com/antirez/redis/raw/2.4.6/redis.conf

找到這個檔案。

這個配置檔案針對的是Redis 2.4.6,你應該用你的版本號替代上面URL裡的"2.4.6"。執行info命令,其顯示的第一個值就是Redis的版本號。

因為這個檔案已經是充分定義(well-documented),我們就不去再進行設定了。

除了通過redis.conf檔案來配置Redis,config set命令可以用來對個別值進行設定。實際上,在將slowlog-log-slower-than設定為0時,我們就已經使用過這個命令了。

還有一個config get命令能顯示一個設定值。這個命令支援模式匹配,因此如果我們想要顯示關聯於日誌(logging)的所有設定,我們可以這樣做:

config get *log*

驗證(Authentication)

通過設定requirepass(使用config set命令或redis.conf檔案),可以讓Redis需要一個密碼驗證。當requirepass被設定了一個值(就是待用的密碼),客戶端將需要執行一個auth password命令。

一旦一個客戶端通過了驗證,就可以在任意資料庫裡執行任何一條命令,包括flushall命令,這將會清除掉每一個數據庫裡的所有關鍵字。通過配置,你可以重新命名一些重要命令為混亂的字串,從而獲得一些安全性。

rename-command CONFIG 5ec4db169f9d4dddacbfb0c26ea7e5ef
rename-command FLUSHALL 1041285018a942a4922cbf76623b741e

或者,你可以將新名字設定為一個空字串,從而禁用掉一個命令。

大小限制(Size Limitations)

當你開始使用Redis,你可能會想知道,我能使用多少個關鍵字?還可能想知道,一個雜湊資料結構能有多少個域(尤其是當你用它來組織資料時),或者是,一個列表資料結構或集合資料結構能有多少個元素?對於每一個例項,實際限制都能達到億萬級別(hundreds of millions)。

複製(Replication)

Redis支援複製功能,這意味著當你向一個Redis例項(Master)進行寫入時,一個或多個其他例項(Slaves)能通過Master例項來保持更新。可以在配置檔案裡設定slaveof,或使用slaveof命令來配置一個Slave例項。對於那些沒有進行這些設定的Redis例項,就可能一個Master例項。

為了更好保護你的資料,複製功能拷貝資料到不同的伺服器。複製功能還能用於改善效能,因為讀取請求可以被髮送到Slave例項。他們可能會返回一些稍微滯後的資料,但對於大多數程式來說,這是一個值得做的折衷。

遺憾的是,Redis的複製功能還沒有提供自動故障恢復。如果Master例項崩潰了,一個Slave例項需要手動的進行升級。如果你想使用Redis去達到某種高可用性,對於使用心跳監控(heartbeat monitoring)和指令碼自動開關(scripts to automate the switch)的傳統高可用性工具來說,現在還是一個棘手的難題。

備份檔案(Backups)

備份Redis非常簡單,你可以將Redis的快照(snapshot)拷貝到任何地方,包括S3、FTP等。預設情況下,Redis會把快照儲存為一個名為dump.rdb的檔案。在任何時候,你都可以對這個檔案執行scpftpcp等常用命令。

有一種常見情況,在Master例項上會停用快照以及單一附加檔案(aof),然後讓一個Slave例項去處理備份事宜。這可以幫助減少Master例項的載荷。在不損害整體系統響應性的情況下,你還可以在Slave例項上設定更多主動儲存的引數。

縮放和Redis叢集(Scaling and Redis Cluster)

複製功能(Replication)是一個成長中的網站可以利用的第一個工具。有一些命令會比另外一些來的昂貴(例如sort命令),將這些執行載荷轉移到一個Slave例項裡,可以保持整體系統對於查詢的快速響應。

此外,通過分發你的關鍵字到多個Redis例項裡,可以達到真正的縮放Redis(記住,Redis是單執行緒的,這些可以執行在同一個邏輯框裡)。隨著時間的推移,你將需要特別注意這些事情(儘管許多的Redis載體都提供了consistent-hashing演算法)。對於資料水平分佈(horizontal distribution)的考慮不在這本書所討論的範圍內。這些東西你也很可能不需要去擔心,但是,無論你使用哪一種解決方案,有一些事情你還是必須意識到。

好訊息是,這些工作都可在Redis叢集下進行。不僅提供水平縮放(包括均衡),為了高可用性,還提供了自動故障恢復。

高可用性和縮放是可以達到的,只要你願意為此付出時間和精力,Redis叢集也使事情變得簡單多了。

小結

在過去的一段時間裡,已經有許多的計劃和網站使用了Redis,毫無疑問,Redis已經可以應用於實際生產中了。然而,一些工具還是不夠成熟,尤其是一些安全性和可用性相關的工具。對於Redis叢集,我們希望很快就能看到其實現,這應該能為一些現有的管理挑戰提供處理幫忙。