redis集群的學習(一)
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集群的學習(一)