1. 程式人生 > >redis集群的學習(一)

redis集群的學習(一)

comm lru set 壓縮字符串 cli 啟動 日誌 修改路徑 man

redis配置文件詳解

redis默認是不作為守護進程來運行的,你可以把這個設置為yes,讓它作為守護進程來運行

註意,當作為守護進程的時候,redis 會把進程ID 寫到/var/run/redis.pid

daemonize no

# 當以守護進程方式運行的時候,redis會把進程ID 默認寫到/var/run/redis.pid 可以在這裏修改路徑

pidfile /var/run/redis.pid

接受連接的特定端口.默認是 6379

如果端口設置為0 redis就不會監聽TCP 套接字

port 6379

如果你想的話,你可以綁定單一接口,如果這裏沒單獨設置,那麽所有接口的連接都會被監聽

#bind 127.0.0.1

# 指定用來監聽時連接的 unix 套接字的路徑,你可以綁定單一接口,如果不指定就不會通過unix套接字監聽

unixsocket /tmp/redis.sock

unixsocketperm 755

#一個客戶端空閑多少秒後關閉連接(0代表禁用,永不關閉)

timeout 0

#設置服務器調試等級

#可能值:

#debug (很多信息,對開發/測試有用)

#verbose(很多精簡的有用信息,但是不像debug 等級那麽多)

#notice (適量的意思,基本上是生產環境中需要的程度)

#warning (只有狠重要/嚴重的信息會記錄下來)

#指定日誌文件名,也可以使用stdout 來強制redis把日誌信息寫到標準輸出上

#註意:如果redis以守護進程方式運行,而你設置日誌顯示的標準輸出的話,那麽日誌會發送到 /dev/null

logfile stdout (可以寫一個日誌文件的路徑)

#要使用系統日誌記錄器很簡單,只要設置 syslog-enabled 為yes 就可以了

#然後根據需要設置其他一些 syslog 參數就可以了

#syslog-enabled no

#指明 syslog身份

syslog ident redis

指明syslog 的設備,必須是一個用戶或者是 local0-local7之一

#syslog-fadlity local 0

database 16

把數據庫存到磁盤上

save <seconds> <changes>

會在指定秒數和數據變化次數之後把數據庫寫到磁盤上

下面的列子將會進行把數據庫寫入磁盤的操作

#900 秒 (15分鐘) 之後,且至少1次變更

#300秒 (5分支) 之後, 且至少10次變更

# 60秒之後,且至少 10000次變更

#註意: 要想不寫磁盤的話就把所有 save 設置 註釋就行了

save 900 1

save 300 10

save 60 10000

只需要一個參數即可

# 當導出到 .rdb 數據庫時 是否用 LZF 壓縮字符串對象

#默認設置為yes,所以幾乎總是生效的

#如果你想節省CPU 的話你可以把這個設置為 no,但是如果你有可壓縮的key的話,那數據文件夾會更大了

rdbcompression yes

#數據庫的文件名

dbfilename dump.rdb

#工作目錄

#數據庫會寫到這個目錄下,文件名叫是上面的 dbfilename 的值

#累加文件也放在這裏

#註意你這裏指定的必須是目錄,不是文件名

dir

##############################

# 主從同步 通過slaveof 配置來實現redis實例的備份

#註意 這裏是本地從遠端復制數據 ,也就是說 本地可以有不同的數據庫文件 ,綁定不同的IP ,監聽不同的IP 監聽不同的端口

#

# slaveof <masterip><masterport>

#如果master 設置了密碼 (通過下面的"requirepass" 選項來配置),那麽slave 在開始同步之前必須進行身份驗證,否則它的同步請求會被拒絕

#

#masterauth <master-password>

#當一個 slave失去和 master的連接,或者同步正在進行中,slave的行為有兩種可能

1)如果 slave-serve-stale-data設置為yes (默認值),slave 會繼續響應客戶端請求,可能是正常的數據,

也可能是還沒獲得值的空數據

2) 如果slave-server-stale-data設置為no,slave 會回復正在從 master同步 SYNC with master in process)

來處理各種請求,除了info和slaveof命令

#

slave-sever-stale-data yes

#下面的選項設置了大塊數據I/O 向master請求數據和ping響應的過期時間

#默認值 60秒

#

#一個很重要的事情:確保這個值比 repl-ping-slave-period 大,否則master 和slave之間的傳輸過期時間比預想的要短

#repl-timeout 60

#要求客戶端在處理任何命令時都要驗證身份和密碼

#警告:因為redis太快了,所以居心不良的人可以每秒嘗試150k的密碼來試圖破解

requirepass redispassword 密碼

# 命令重命名

#在共享環境,可以為危險的命令改變名字.比如,你可以為config改個其他不太容易猜到的名字,這樣你自己仍然可以使用,而別人卻沒法做壞事了

#列如

rename-command CONFIG "你自己想命名的名字"

#甚至也可以通過給命令賦值 一個空字符串來完全禁用這條命令

#

# rename-command CONFIG ""

#############限制##########################

#設置最多同時連接客戶的數量

#默認沒有限制,這個關系到redis進程能夠打開的文件描述符數量

#特殊值 0 表示沒有限制

#一旦達到這個限制,redis會關閉所有新連接並發送錯誤 達到最大用戶數上限

#maxclients 128

#不要用比設置的上限更多的內存,一旦內存使用達到上限,redis會根據選定的回收策略

參見(maxmemory-policy) 刪除key

#如果 因為刪除策略問題 redis無法刪除key,或者策略設置為noeviction redis會回復需要更多內存的錯誤信息給命令

例如:set LPUSH 等等,但是會繼續合理響應只讀命令:比如 get

#在使用redis作為LRU 緩存 ,或者為實例設置了硬性內存限制的時候,(使用noeviction 策略)的時候,這個選項還是蠻有用的)

#警告:當一推slave連上達到內存上限的實例的時候,響應slave需要的輸出緩存所需內存不計算在使用內存當中

#這樣當請求 一個刪除掉的key的時候就不會觸發網格問題,重新同步的事件,然後slave就會收到一堆刪除指令,直到數據庫空了為止

簡而言之,如果你用slave 連上一個master的話,那建議你把master內存限制設小點兒,確保有足夠的內存用做輸出緩存

maxmemory <bytes>

內存策略,如果內存限制了,redis如何刪除key,你可以在下面5個裏面選

#volatile-lru    - 根據lru算法生成 的過期時間來刪除

#allkeys-lru   - 根據lru算法刪除任何key

#volatile-random -根據過期設置來隨機刪除Key

#allkeys--random -無差別隨機刪

#volatile-ttl    -根據最近過期時間來刪除

#noeviction - 誰也不刪,直接在寫操作時返回錯誤

# 註意:對所有策略來說,如果redis找不到合適的可以刪除的key都會在寫操作時返回一個錯誤

默認值如下

maxmemory-policy volatile-lru

# 默認情況下,redis是異步的把數據導出到磁盤上,這種情況下,當redis掛掉的時候,最新的數據就丟了

#如果不希望丟掉任何一條數據的話就該用純累加模式,一旦開啟這個模式,redis就會把每次寫入的數據在接收

後都寫入appendonly.aof 文件

#每次啟動時redis都會把這個文件的數據讀入內存中

#註意,異步導出的數據庫文件和純累加文件可以並存

#如果純累加模式開啟了,那麽redis會在啟動時載入日誌文件而忽略導出的 dump.rdb文件

#重要 查看BGREWRITEAOF 來了解當累加日誌文件太大了之後,怎麽在後臺重新處理這個日誌文件

#純累加文件名字 (默認appendonly.aof)

appendfilename appendonly.aof

# fsync() 請求操作系統馬上把 數據寫到磁盤上,不要再等了

#有些 操作系統會真的把數據馬上刷到磁盤上,有些則要磨蹭一下,但是會盡快去做

#redis支持三種不同的模式

#no:不要立刻寫,只有在操作系統需要寫的時候再寫,比較快

#always:每次寫操作都立刻寫入到aof文件,慢,但是最安全

# everysec:每秒寫一次,折中方案

默認的everysec 通常來說能在速度和數據之間取得比較好的平衡

如果真的理解了這個意味著什麽,那麽設置no 可以獲得更好的性能表現(如果丟數據的話,則只能拿到一個不是很新的快照)

#或者相反的,你選擇always 來犧牲速度確保數據安全,完整

如果拿不準 就使用everysec

#appendfsync always

appendfsync everysec

#appendfsync no

#如果你有延遲的問題那就把這個設為yes,否則就保持 no,這是保存持久數據最安全的方式

no-appendfsync-no-rewrite no

#自動重寫AOF 文件

如果AOF日誌文件大到指定百分比,redis能夠通過BGREWRITEAOF 自動重寫AOF日誌文件

#

#工作原理:redis 記住上次重寫時AOF 日誌的大小(或者重啟後沒有寫操作的話,那好直接用此時的AOF 文件)

基準尺寸和當前尺寸做比較,如果當前尺寸超過指定比例,就會觸發重寫操作

你還需要指定被重寫日誌的最小尺寸,這樣避免了達到約定百分比但尺寸仍然很小的情況還要重寫

#指定百分比為0 會禁用AOF 自動重寫特性

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

redis慢查詢日誌可以記錄超過指定時間的查詢

例如;連接客戶端,發送響應數據等,只計算命令運行的實際時間(這是唯一一種命令運行線程阻塞而無法同時為其他請求服務的場景)

你可以為慢查詢日誌配置兩個參數:一個是超標的時間,單位為微妙

另一個是慢查詢日誌的長度.當 一個新的命令被寫進日誌的時候,最老的那個記錄會被刪掉

下面的時間單位是微妙,所以1000000 就是1秒,註意,負數時間會禁用慢查詢日誌,而0則會強制記錄所有命令

slowlog-log-slower-than 10000

#這個長度沒有限制,只要有足夠的內存就行,你可以通過 slowlog reset來釋放內存

slow-max-len 128

#警告!虛擬內存在redis2.4是反對的

### 非常不鼓勵使用虛擬內存

#虛擬內存可以使redis在內存不夠的情況下仍然可以將所有數據庫序列保存在內存裏

為了做到這一點,高頻key會調到內存裏,而低頻key會轉到交換文件裏,就像操作系統使用內存頁一樣

#要使用虛擬內存,只要把vm-enabled 設置為yes,並根據需要設置下面三個虛擬內存參數就可以了

vm-enabled no

#vm-enabled yes

#這是交換文件的路徑,估計你猜到了,交換文件不能在多個redis實例之間共享,所以確保每個redis實例使用一個獨立交換文件

vm-swap-file /tmp/redis.swap

appendonly no

redis集群的學習(一)