官網:https://redis.io/downloadnode
redis-4.0.14.tar.gzredis
# tar zxf redis-4.0.14.tar.gz算法
# mkdir /usr/local/redis/etc -p數據庫
# make PREFIX=/usr/local/redis install緩存
# cp -ap redis-4.0.14/redis.conf /usr/local/redis/etc/安全
# cat /etc/profile | grep redis服務器
export PATH=$PATH:/usr/local/redis/binapp
# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf異步
因爲redis參數沒有調整,直接啓動redis進程不會後臺啓動,須要作參數調整。socket
#是否做爲守護進程運行'yes'或者'no','yes'表示啓動redis服務後臺運行,反之。
daemonize yes
#監聽IP,redis通常監聽127.0.0.1 網段訪問,集羣模式須要指定IP地址。
bind 0.0.0.0 #監聽全部的IP端口,不論本機有幾塊網卡。
bind 127.0.0.1 #只監聽127.0.0.1本地端口。
#本機含有三塊網卡,只監聽192.xxx和10.xxx,若是第三塊網卡IP是172.xxx,即便ping的通,也沒法鏈接到redis。
bind 192.168.1.100 10.0.0.1
#會報錯,redis服務沒法啓動。
bind #隨便給個不存在的IP
#會報錯,只能寫具體存在的IP地址
bind 172.17.80.* 172.17.80.%
報錯log以下:
10202:M 19 Jun 10:50:25.261 # Creating Server TCP listening socket 172.17.80.%:6379: Name or service not known
10276:C 19 Jun 10:51:08.707 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
10276:C 19 Jun 10:51:08.707 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=10276, just started
10276:C 19 Jun 10:51:08.707 # Configuration loaded
10277:M 19 Jun 10:51:08.794 # Creating Server TCP listening socket 172.17.80.*:6379: Name or service not known
#監聽redis服務的端口
port 6379
#指定存儲Redis進程號的文件路徑。
pidfile /var/run/redis-6379.pid
#客戶端和Redis服務端的鏈接超時時間,默認是0,表示永不超時。
timeout 0
#TCP鏈接保活策略,能夠經過tcp-keepalive配置項來進行設置,單位爲秒,假如設置爲60秒,則server端會每60秒向鏈接空閒的客戶端發起一次ACK請求,以檢查客戶端是否已經掛掉,對於無響應的客戶端則會關閉其鏈接。因此關閉一個鏈接最長鬚要120秒的時間。若是設置爲0,則不會進行保活檢測。
tcp-keepalive 0
#redis支持經過loglevel配置項設置日誌等級,共分四級,即debug、verbose、notice、warning。
loglevel notice
#redis也支持經過logfile配置項來設置日誌文件的生成位置。若是設置爲空字符串,則redis會將日誌輸出到標準輸出。假如你在daemon狀況下將日誌設置爲輸出到標準輸出,則日誌會被寫到/dev/null中。
logfile ""
若是但願日誌打印到syslog中,也很容易,經過syslog-enabled來控制。另外,syslog-ident還可讓你指定syslog裏的日誌標誌,好比:
syslog-ident redis
並且還支持指定syslog設備,值能夠是USER或LOCAL0-LOCAL7。具體能夠參考syslog服務自己的用法。
syslog-facility local0
對於redis來講,能夠設置其數據庫的總數量,假如你但願一個redis包含16個數據庫,那麼設置以下:
這16個數據庫的編號將是0到15。默認的數據庫是編號爲0的數據庫。用戶可使用select <DBid>來選擇相應的數據庫。
databases 16
快照,redis的RDB持久化相關的配置:
save <seconds> <changes>
save 900 1 //表示每15分鐘且至少有1個key改變,就觸發一次持久化
save 300 10 //表示每5分鐘且至少有10個key改變,就觸發一次持久化
save 60 10000 //表示每60秒至少有10000個key改變,就觸發一次持久化
禁用RDB持久化的策略,只要不設置任何save指令就能夠,或者給save傳入一個空字符串參數也能夠達到相同效果:
save ""
當Redis數據持久化時,內存和RDB數據不一致時,redis中止對外提供服務,若是數據不一致時,繼續使redis提供服務,配置以下參數:
stop-writes-on-bgsave-error yes
對於存儲到磁盤中的快照,能夠設置是否進行壓縮存儲。若是是的話,redis會採用LZF算法進行壓縮。若是你不想消耗CPU來進行壓縮的話,能夠設置爲關閉此功能,可是存儲在磁盤上的快照會比較大。
rdbcompression yes
在存儲快照後,還可讓redis使用CRC64算法來進行數據校驗,可是這樣作會增長大約10%的性能消耗,若是你但願獲取到最大的性能提高,能夠關閉此功能。
rdbchecksum yes
設置快照文件的名稱,默認配置:
dbfilename dump.rdb
設置這個快照文件存放的路徑。好比默認設置就是當前文件夾:
dir ./
redis主從同步功能:
經過slaveof配置項能夠控制某一個redis做爲另外一個redis的從服務器,經過指定IP和端口來定位到主redis的位置。通常狀況下,咱們會建議用戶爲從redis設置一個不一樣頻率的快照持久化的週期,或者爲從redis配置一個不一樣的服務端口等等。
slaveof <masterip> <masterport>
從redis爲只讀:
slave-read-only yes
從redis會週期性的向主redis發出PING包,經過repl_ping_slave_period指令來控制其週期,默認是10秒。
repl-ping-slave-period 10
用戶能夠設置上述超時的時限,不過要確保這個時限比repl-ping-slave-period的值要大,不然每次主redis都會認爲從redis超時。
repl-timeout 60
在主從同步時,可能在這些狀況下會有超時發生:
以從redis的角度來看,當有大規模IO傳輸時。
以從redis的角度來看,當數據傳輸或PING時,主redis超時
以主redis的角度來看,在回覆從redis的PING時,從redis超時
控制在主從同步時是否禁用TCP_NODELAY。若是開啓TCP_NODELAY,那麼主redis會使用更少的TCP包和更少的帶寬來向從redis傳輸數據。可是這可能會增長一些同步的延遲,大概會達到40毫秒左右。若是你關閉了TCP_NODELAY,那麼數據同步的延遲時間會下降,可是會消耗更多的帶寬。
repl-disable-tcp-nodelay no
設置同步隊列長度。隊列長度(backlog)是主redis中的一個緩衝區,在與從redis斷開鏈接期間,主redis會用這個緩衝區來緩存應該發給從redis的數據。這樣的話,當從redis從新鏈接上以後,就沒必要從新全量同步數據,只須要同步這部分增量數據便可。
repl-backlog-size 1mb
若是主redis等了一段時間以後,仍是沒法鏈接到從redis,那麼緩衝隊列中的數據將被清理掉。咱們能夠設置主redis要等待的時間長度。若是設置爲0,則表示永遠不清理。默認是1個小時。
repl-backlog-ttl 3600
# 設置slave優先級,默認爲100
# 當主服務器不能正確工做的時候,數字低的首先被提高爲主服務器,可是0是禁用選擇
slave-priority 100
# 若是少於 N 個 slave 鏈接,且延遲時間 <=M 秒,則 master 可配置中止接受寫操做。
# 例如須要至少 3 個 slave 鏈接,且延遲 <=10 秒的配置:
# min-slaves-to-write 3
# min-slaves-max-lag 10
# 設置 0 爲禁用
# 默認 min-slaves-to-write 爲 0 (禁用), min-slaves-max-lag 爲 10
#設置Redis鏈接密碼,若是配置了鏈接密碼,客戶端在鏈接Redis時須要經過AUTH <password>命令提供密碼,默認關閉
requirepass foobared
設置同一時間最大客戶端鏈接數,默認無限制,Redis能夠同時打開的客戶端鏈接數爲Redis進程能夠打開的最大文件描述符數,若是設置 maxclients 0,表示不做限制。當客戶端鏈接數到達限制時,Redis會關閉新的鏈接並向客戶端返回max number of clients reached錯誤信息
maxclients 128
指定Redis最大內存限制,Redis在啓動時會把數據加載到內存中,達到最大內存後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理 後,仍然到達最大內存設置,將沒法再進行寫入操做,但仍然能夠進行讀取操做。Redis新的vm機制,會把Key存放內存,Value會存放在swap區
maxmemory <bytes>
指定是否在每次更新操做後進行日誌記錄,Redis在默認狀況下是異步的把數據寫入磁盤,若是不開啓,可能會在斷電時致使一段時間內的數據丟失。由於 redis自己同步數據文件是按上面save條件來同步的,因此有的數據會在一段時間內只存在於內存中。默認爲no
appendonly no
指定更新日誌文件名,默認爲appendonly.aof
appendfilename appendonly.aof
指定更新日誌條件,共有3個可選值:
no:表示等操做系統進行數據緩存同步到磁盤(快)
always:表示每次更新操做後手動調用fsync()將數據寫到磁盤(慢,安全)
everysec:表示每秒同步一次(折衷,默認值)
appendfsync everysec
指定是否啓用虛擬內存機制,默認值爲no,簡單的介紹一下,VM機制將數據分頁存放,由Redis將訪問量較少的頁即冷數據swap到磁盤上,訪問多的頁面由磁盤自動換出到內存中
vm-enabled no
虛擬內存文件路徑,默認值爲/tmp/redis.swap,不可多個Redis實例共享
vm-swap-file /tmp/redis.swap