1.下載redishttps://redis.io/download
2.解壓,編譯:
$ tar xzf redis-3.2.9.tar.gz$ cd redis-3.2.9$ make
3.src下面現在回出來三個可執行檔,redis-server redis-cli redis-benchmark,把他們拷貝出來放在一個指定檔案夾下,後續在這個檔案下去啟動和停止,進去redis,src同路徑下有redis.config,同樣和上述三個放在一起。
cp ./src/redis-server redis-benchmark redis-cli/usr/redis
cp redis.conf /usr/redis
開啟redis.config:
bind 127.0.0.1 #指定Redis只接收來自於該IP 位址的請求,如果不進行設定,那麼將處理所有請求,在生產環境中為了安全最好設定該項。3.2版本預設開啟
protected-mode yes
port 6379 #監聽連接埠,預設為6379
tcp-backlog 511
timeout 0 #設定用戶端串連時的逾時時間,單位為秒。當用戶端在這段時間內沒有發出任何指令,那麼關閉該串連
tcp-keepalive 300 #指定TCP串連是否為長串連,"偵探"訊號有server端維護。預設為0.表示禁用
################################# GENERAL #####################################
daemonize yes #是否已守護的形式啟動
supervised no
pidfile /var/run/redis_6379.pid #pid檔案所在位置
loglevel notice #log 等級分為4 級,debug,verbose, notice, 和warning。生產環境下一般開啟notice
logfile ""
databases 16 #設定資料庫的個數,可以使用SELECT 命令來切換資料庫。預設使用的資料庫是0號庫。預設16個庫
#儲存資料快照的頻率,即將資料持久化到dump.rdb檔案中的頻度。用來描述"在多少秒期間至少多少個變更操作"觸發snapshot資料儲存動作
save 900 1
save 300 10
save 60 10000
預設設定,意思是:
if(在60 秒之內有10000 個keys 發生變化時){
進行鏡像備份
}else if(在300 秒之內有10 個keys 發生了變化){
進行鏡像備份
}else if(在900 秒之內有1 個keys 發生了變化){
進行鏡像備份
}
#當持久化出現錯誤時,是否依然繼續進行工作,是否終止所有的用戶端write請求。預設設定"yes"表示終止,一旦snapshot資料儲存故障,
那麼此server為唯讀服務。如果為"no",此次snapshot將失敗,但下一次snapshot不會受到影響,不過如果出現故障,資料只能恢複到"最近一個成功點"
stop-writes-on-bgsave-error yes
#在進行資料鏡像備份時,是否啟用rdb檔案壓縮手段,預設為yes。壓縮可能需要額外的cpu開支,不過這能夠有效減小rdb檔案的大,有利於儲存/備份/傳輸/資料恢複
rdbcompression yes
rdbchecksum yes
#鏡像備份檔案的檔案名稱,預設為 dump.rdb
dbfilename dump.rdb
資料庫鏡像備份的檔案rdb/AOF檔案放置的路徑。這裡的路徑跟檔案名稱要分開配置是因為Redis 在進行備份時,先會將當前資料庫的狀態寫入到一個臨時檔案中,
等備份完成時,再把該臨時檔案替換為上面所指定的檔案,而這裡的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中
dir ./
#當主master伺服器掛機或主從複製在進行時,是否依然可以允許客戶訪問可能到期的資料。在"yes"情況下,slave繼續向用戶端提供唯讀服務,
有可能此時的資料已經到期;在"no"情況下,任何向此server發送的資料請求服務(包括用戶端和此server的slave)都將被告知"error"
slave-serve-stale-data yes
#slave是否為"唯讀",強烈建議為"yes"
slave-read-only yes
設定該資料庫為其他資料庫的從資料庫,並為其指定master資訊。
slaveof <masterip> <masterport>
當主要資料庫串連要求輸入密碼驗證時,在這裡指定
masterauth
slave向指定的master發送ping訊息的時間間隔(秒),預設為10
repl-ping-slave-period 10
slave與master通訊中,最大空閑時間,預設60秒.逾時將導致串連關閉
# repl-timeout 60
repl-diskless-sync no
repl-diskless-sync-delay 5
slave與master的串連,是否禁用TCP nodelay選項。"yes"表示禁用,那麼socket通訊中資料將會以packet方式發送(packet大小受到socket buffer限制)。
可以提高socket通訊的效率(tcp互動次數),但是小資料將會被buffer,不會被立即發送,對於接受者可能存在延遲。"no"表示開啟tcp nodelay選項,任何
資料都會被立即發送,及時性較好,但是效率較低,建議設為no
repl-disable-tcp-nodelay no
適用Sentinel模組(unstable,M-S叢集管理和監控),需要額外的設定檔支援。slave的權重值,預設100.當master失效後,Sentinel將會從slave列表
中找到權重值最低(>0)的slave,並提升為master。如果權重值為0,表示此slave為"觀察者",不參與master選舉
slave-priority 100
記憶體不足"時,資料清除策略,預設為"volatile-lru"。
volatile-lru ->對"到期集合"中的資料採取LRU(近期最少使用)演算法.如果對key使用"expire"指令指定了到期時間,那麼此key將會被添加到"到期集合"中。將已經到期/LRU的資料優先移除.如果"到期集合"中全部移除仍不能滿足記憶體需求,將OOM.
allkeys-lru ->對所有的資料,採用LRU演算法
volatile-random ->對"到期集合"中的資料採取"隨即選取"演算法,並移除選中的K-V,直到"記憶體足夠"為止. 如果如果"到期集合"中全部移除全部移除仍不能滿足,將OOM
allkeys-random ->對所有的資料,採取"隨機選取"演算法,並移除選中的K-V,直到"記憶體足夠"為止
volatile-ttl ->對"到期集合"中的資料採取TTL演算法(最小存活時間),移除即將到期的資料.
noeviction ->不做任何幹擾操作,直接返回OOM異常
另外,如果資料的到期不會對"應用系統"帶來異常,且系統中write操作比較密集,建議採取"allkeys-lru"
# maxmemory-policy volatile-lru
預設情況下,redis 會在後台非同步把資料庫鏡像備份到磁碟,但是該備份是非常耗時的,而且備份也不能很頻繁。所以redis 提供了另外一種更加
高效的Database Backup及災難恢複方式。開啟append only 模式之後,redis 會把所接收到的每一次寫操作請求都追加到appendonly.aof 檔案中,當redis
重新啟動時,會從該檔案恢複出之前的狀態。但是這樣會造成appendonly.aof 檔案過大,所以redis 還支援了BGREWRITEAOF 指令,對appendonly.aof
進行重新整理。如果不經常進行資料移轉操作,推薦生產環境下的做法為關閉鏡像,開啟appendonly.aof,同時可以選擇在訪問較少的時間每天對
appendonly.aof 進行重寫一次。另外,對master機器,主要負責寫,建議使用AOF,對於slave,主要負責讀,挑選出1-2台開啟AOF,其餘的建議關閉
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua指令碼啟動並執行最大時間
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
############################### ADVANCED CONFIG ###############################
#資料量小於等於hash-max-ziplist-entries的用ziplist,大於hash-max-ziplist-entries用hash
hash-max-ziplist-entries 512
#value大小小於等於hash-max-ziplist-value的用ziplist,大於hash-max-ziplist-value用hash。
hash-max-ziplist-value 64
#資料量小於等於list-max-ziplist-entries用ziplist,大於list-max-ziplist-entries用list。
list-max-ziplist-entries 512
#value大小小於等於list-max-ziplist-value的用ziplist,大於list-max-ziplist-value用list。
list-max-ziplist-value 64
#資料量小於等於set-max-intset-entries用iniset,大於set-max-intset-entries用set。
set-max-intset-entries 512
#資料量小於等於zset-max-ziplist-entries用ziplist,大於zset-max-ziplist-entries用zset。
zset-max-ziplist-entries 128
#value大小小於等於zset-max-ziplist-value用ziplist,大於zset-max-ziplist-value用zset。
zset-max-ziplist-value 64
#value大小小於等於hll-sparse-max-bytes使用稀疏資料結構(sparse),大於hll-sparse-max-bytes使用稠密的資料結構(dense)。
一個比16000大的value是幾乎沒用的,建議的value大概為3000。如果對CPU要求不高,對空間要求較高的,建議設定到10000左右。
hll-sparse-max-bytes 3000
#Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低記憶體的使用。當你的使用情境中,有非常嚴格的即時性需要,
不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。如果沒有這麼嚴格的即時性要求,可以設定為yes,以便能夠儘可能快的釋放記憶體。
activerehashing yes
client-output-buffer-limit normal 0 0 0
#對於slave client和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那麼伺服器就會立即斷開用戶端串連。
client-output-buffer-limit slave 256mb 64mb 60
#對於pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那麼伺服器就會立即斷開用戶端串連。
client-output-buffer-limit pubsub 32mb 8mb 60
#redis執行任務的頻率為1s除以hz。
hz 10
#在aof重寫的時候,如果開啟了aof-rewrite-incremental-fsync開關,系統會每32MB執行一次fsync。這對於把檔案寫入磁碟是有協助的,可以避免過大的延遲峰值
aof-rewrite-incremental-fsync yes
啟動:。./redis-cli redis.conf
用設定檔啟動用戶端
需要啟動多個Redis執行個體:
一台Redis伺服器,分成多個節點,每個節點分配一個連接埠(6380,6381…),預設連接埠是6379。
每個節點對應一個Redis設定檔,如: redis6380.conf、redis6381.conf
#cp redis.confredis6380.conf
#vi redis6380.conf
pidfile : pidfile/var/run/redis/redis_6380.pid
port 6380
logfile : logfile/var/log/redis/redis_6380.log
rdbfile : dbfilenamedump_6380.rdb
(其他設定檔類似修改)
啟動多個redis執行個體:
#redis-server/usr/local/redis/redis6380.conf
#redis-server/usr/local/redis/redis6381.conf