----------------------------------------安裝redis-5.0.4----------------------------------------c++
wget http://download.redis.io/releases/redis-5.0.4.tar.gz tar zxvf redis-5.0.4.tar.gz -C /usr/local/ mv /usr/local/redis-5.0.4 /usr/local/redis cd /usr/local/redis make
修改配置文件redis
bind 192.168.100.101 #配置監聽地址 protected-mode no #關閉保護模式,容許外網鏈接數據庫 daemonize yes #開啓之後臺方式運行 logfile "/usr/local/redis/log/redis.log" #日誌文件路徑 dir /usr/local/redis/ #dump快照存放路徑
mkdir /usr/local/redis/log;touch /usr/local/redis/log/redis.log #建立日誌文件
建立命令連接數據庫
ln -s /usr/local/redis/src/redis-cli /usr/local/bin/redis ln -s /usr/local/redis/src/redis-cli /usr/local/bin/redis-cli ln -s /usr/local/redis/src/redis-server /usr/local/bin/redis-server
設置redis開機自啓動vim
echo "redis-server /usr/local/redis/redis.conf" >> /etc/rc.local chmod +x /etc/rc.local
啓動redis服務安全
redis-server /usr/local/redis/redis.conf
測試鏈接服務器
redis-cli
安裝過程可能出現的問題app
1.CentOS默認沒有安裝gcc,這會致使咱們沒法make成功ide
yum install gcc-c++ -y #解決辦法:yum安裝開發環境
2.make時報以下錯誤:函數
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory性能
#include <jemalloc/jemalloc.h>
^
compilation terminated.
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/root/redis-5.0.4/src'
make: *** [all] Error 2
緣由是jemalloc重載了Linux下的ANSI C的malloc和free函數
make MALLOC=libc #解決辦法:make時添加參數
3.make以後,會出現一句提示
Hint: To run 'make test' is a good idea ;)
可是不測試,一般是可使用的;若咱們運行make test ,會有以下提示
[devnote@devnote src]$ make test
You need tcl 8.5 or newer in order to run the Redis test
make: ***[test] Error_1
yum install tcl -y #解決辦法:yum安裝tcl8.5
----------------------------------------redis持久化方式----------------------------------------
RDB持久化:將Reids在內存中的數據庫記錄定時dump到磁盤上,相似於快照功能(半持久化模式)
RDB方式配置:vim /usr/local/redis/redis.conf save 900 1 #開啓RDB快照功能,在900秒內完成一個key值得變更觸發快照功能,如若將全部save配置項都註釋掉,那麼則將關閉RDB快照功能 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes #當RDB快照後臺進程失敗,不影響用戶得寫操做 rdbcompression yes #是否將RDB快照文件壓縮,關閉後會增長性能 rdbchecksum no #關閉RDB快照文件的檢查校驗,增長性能 dbfilename dump.rdb #快照文件的名稱 dir ./ #快照文件的存儲路徑,./爲redis的安裝目錄下
AOF持久化:append only file--原理是將Reids的操做日誌以追加的方式寫入文件,近似實時性(全持久化模式)
AOF持久化方式配置:vim /usr/local/redis/redis.conf #save 900 1 #save 300 10 #save 60 10000 appendonly yes #開啓AOF持久化方式 appendfilename "appendonly.aof" #指定持久化的文件 appendfsync everysec #頻率,具體參數見下表 no-appendfsync-on-rewrite no #如若設置爲yes,則redis執行的命令會存放到緩衝區,待系統自動同步到硬盤 auto-aof-rewrite-percentage 100 #若當前寫入的AOF文件達到了上次rewrite文件大小的100%,則觸發rewrite操做 auto-aof-rewrite-min-size 64mb #設置AOF持久化重寫文件的最小值,當達到60M而且符合100%的條件時,則觸發rewrite操做
選項 | 同步頻率 |
always | 每一次寫操做都會調用一次fsync,這時數據是最安全的,固然,因爲每次都會執行fsync,因此其性能也會受到影響 |
everysec | 默認每隔一秒進行一次fsync調用,將緩衝區中的數據寫到磁盤,可是當這一次的fsync調用時長超過1秒時。Redis會採起延遲fsync的策略,再等一秒鐘。也就是在兩秒後再進行fsync,這一次的fsync就無論會執行多長時間都會進行 |
no | redis不會主動調用fsync去將AOF日誌內容同步到磁盤,因此這一切就徹底依賴於操做系統的調試了。對大多數Linux操做系統,是每30秒進行一次fsync,將緩衝區中的數據寫到磁盤上 |
----------------------------------------redis主從複製----------------------------------------
同步類型:
1.全量同步:
redis全量複製通常發生在Replica初始化階段,這時Replica須要將Master上的全部數據都複製一份。具體步驟以下:
1)從服務器鏈接主服務器,發送SYNC命令(從服務器向主服務器初次同步時,不會影響主服務器接收客戶端的請求);
2)主服務器接收到SYNC命名後,開始執行BGSAVE命令生成RDB文件並使用緩衝區記錄此後執行的全部寫命令;
3)主服務器BGSAVE執行完後,向全部從服務器發送快照文件,並在發送期間繼續記錄被執行的寫命令;
4)從服務器收到快照文件後丟棄全部舊數據,載入收到的快照;
5)主服務器快照發送完畢後開始向從服務器發送緩衝區中的寫命令;
6)從服務器完成對快照的載入,開始接收命令請求,並執行來自主服務器緩衝區的寫命令;
完成上面幾個步驟後就完成了從服務器數據初始化的全部操做,從服務器此時能夠接收來自用戶的讀請求
2.增量同步:
redis增量複製是指Replica初始化後開始正常工做時主服務器發生的寫操做同步到從服務器的過程。 增量複製的過程主要是主服務器每執行一個寫命令就會向從服務器發送相同的寫命令,從服務器接收並執行收到的寫命令
同步策略:
主從剛剛鏈接的時候,進行全量同步;全同步結束後,進行增量同步;若是有須要Replica在任什麼時候候均可以發起全量同步;redis策略是,不管如何,首先會嘗試進行增量同步,如不成功,要求從機進行全量同步
注:若是多個Replica斷線了,須要重啓的時候,由於只要Replica啓動,就會發送sync請求和主機全量同步,當多個同時出現的時候,可能會致使Master IO劇增致使宕機
建議開啓master主服務器的持久化功能,避免出現master重啓後,數據沒法恢復;
主從配置:
Master配置 vim /usr/local/redis/redis.conf min-replicas-to-write 2 #設置replica節點的數量,若是replica節點數量少於此值,那麼master節點將中止客戶端的一切寫請求 min-replicas-max-lag 10 #master與replica之間同步數據的超時時間,若超過此時間,master節點將中止客戶端的一切寫操做
Replica配置 vim /usr/local/redis/redis.conf replicaof 192.168.100.101 6379 #指定master的ip地址以及端口 masterauth 123123 #指定master的鏈接密碼
驗證主從複製
192.168.100.101:6379> info replication #查看複製信息