redis-cli:the redis command line interface
command line usage:
$redis-cli incr mycounter
輸出的結果只會顯示在終端,如果需要將結果指定到相應的文件,需要自己定義
$redis-cli incr mycounter >/tmp/output.txt
連接非本機和非默認端口:
$redis-cli -h reedis15.localnet.org -p 6390 ping
如果實例通過密碼保護:
$redis-cli -a kasumi ping
getting input from other programs:
$redis-cli -x set foo < /etc/services
或者
$cat /tmp/commands.txt | redis-cli
文件中的命令會一次執行
continuously run the same command:
-r:count -i:delay
$redis-cli -r 5 incr foo
(integer) 1
(integer) 2
(integer) 3
(integer) 4
(integer) 5
$redis-cli -r 1 -i 1 INFO | grep rss_human
CSV output:
使用redis-cli快速導出數據到外部程序
$redis-cli lpush mylist a b c d
(integer) 4
$redis-cli --csv lrange mylist 0 -1
"d","c","b","a"
running Lua scripts:
使用redis-cli執行腳本
$ cat /tmp/script.lua
return redis.call('set',KEYS[1],ARGV[1])
$ redis-cli --eval /tmp/script.lua foo , bar
OK
interactive mode:(交互模式 )
redis-cli對於腳本和確定類型的測試很有幫助,使用redis-cli而不加任何參數,將進入interactive mode.
使用connect連接不同的實例,指明主機名和端口:
connect metal 6379
metal:6379>
出於非連接狀態的時候,CLI會企圖自動重新連接,如果嘗試連接失敗,將會給出錯誤的信息,並且顯示當前未連接的狀態。
127.0.0.1:6379> debug restart
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> ping
PONG
127.0.0.1:6379> (now we are connected again)
如果在操作的中間過程失去連接,當重新建立連接后,redis-cli會自動選擇最新的數據,之前的數據狀態會丟失,
雖然這不是一個經常發生的情況,但是需要了解這個限制。
getting a list of keys:
$redis-cli --scan | head -10
$redis-cli --scan --partten '-11' --使用--partten篩選需要查詢的值的類型
$redis-cli --scan --partten 'user:*' | wc -1 --使用wc對篩選的結果進行統計
pub/sub mode:
sub需要塊和等待信息的寫入
$redis-cli psubscribe '*'
monitoring commands executed in redis:
$redis-cli monitor
可以使用grep來過濾需要監控的特定的數據
remote backup of RDB files:
在redis同步之后,主從通過RDB的形式交換數據.
$redis-cli --rdb /tmp/dump.rdb
SYNC sent to master, writing 13256 bytes to '/tmp/dump.rdb'
Transfer finished with success.
是備份恢復的有效解決方式,在備份的過程中,如果返回值不是0,則表明在備份的過程中出現了錯誤。
slave mode:
$redis-cli --slave
redis configuration:
redis可以通過安裝時默認的配置文件啟動,但是這只適用於測試.
the self documented redis.conf for redis3.0
--https://raw.githubusercontent.com/antirez/redis/3.0/redis.conf
changing redis configuration while the server is running:
在不停止和重啟的情況下修改redis的配置文件,可以使用CONFID SET和CONFIG GET,但是這種更改對redis.conf文件不會有任何影響,
所以在下一次重啟的時候,會使用之前的配置文件.
使用CONFIG REWRITE去重寫redis.conf,會自動掃描redis.conf,更新與當前的配置不匹配的參數值。
replication:(復制)
1.redis使用異步的同步機制
2.一個主服務可以有多個從服務
3.從服務可以接受其他非同一注服務的從服務的連接,作為一個級聯的結構
safety of replication when master has persistence turned off:
當開啟復制的時候,強烈建議保持主服務一直開啟,如果不能確保主服務一直開啟,應當避免在服務器重啟后,自動重啟redis服務.
當從服務進行復制的時候,會刪除之前保持的數據,保持新復制的數據。如果主服務出於關閉狀態,當開機自動重啟后,主服務中的數據是空的,
當從服務去復制數據的時候,將會復制空數據,然后刪除之前所保留的數據。
every time data safety is important !!!
diskless replication:
repl-diskless-sync參數
slave-read-only
redis可寫的數據個數大於63,但是默認redis實例只可以連接16個數據庫
如果master使用了請求認證,slave在同步操作的時候需要進行密碼驗證,可以將master的密碼認證寫入到配置文件,永久生效:
masterauth
redis administration:
redis setup hints:
1.vim /etc/sysctl.conf
vm.overcommit_memory = 1
重啟服務器或者執行sysctl vm.overcommit_memory=1使配置立即生效
2.停止linux內核的相關參數
echo never > /sys/kernel/mm/transparent_hugepage/enabled
3.確保有一定的swap空間
4.redis默認不需要密碼驗證,可以監聽所有的接口
upgrading or restarting a redis instance without downtime:
1.開啟slave,需要另外的服務器或者足夠的RAM空間來保證兩個redis實例同時運行
2.如果是單實例,則需要在其他端口運行redis服務
3.等待復制的初始同步完成
4.使用INFO確保master和slave保持相同的key值,並且slave可以響應指令
5.允許slave可以進行寫操作:config set slave-read-only no
6.配置所有的客戶端,使其可以使用新的實例
7.保證master不再接收任何序列,然后選取slave作為master,使用SLAVEOF NO ONE,然后關閉master
redis security:
bind 127.0.0.1
authentication feature:
如果有其他的防火牆的保護,就不需要進行密碼的設置
$vim /data/redis/etc/redis.conf
requirepass Dm1vh3u1jyjsYMVc
redis clients handing:
in what order clients are served:
當有新的請求的時候,才會處理一個read的信號。
output buffers lilmits:
redis需要處理一個長度可變的輸出緩存,命令可以產生很大的數據,傳輸給客戶端。
hard limit:當緩存達到限制值的時候,redis會關閉其他客戶端的連接
soft limit:依賴於時間的限制,在某一個連續的時間段,輸出緩存超出某個限制,則會關閉連接
不同的客戶端有不同的默認限制:
1.一般的用戶,沒有緩存的限制
2.pub/sub clients,hard limit:32 soft limit:8 60
3.slave,hard limit:256 soft limit:64 60
在配置文件中修改緩存的限制
client timeouts:
超時請求只適用於normal clients,不適用於pub/sub clients.
client list
查看連接的client,client kill+addr停止特定的client.
high availability:
1.監控:檢測系統會持續檢測master和slave是否正常工作
2.告警:檢測系統會通過API通知管理員或者其他的計算機程序,redis出現了錯誤
3.走動的失敗檢測:當master服務沒有正常運行的時候,檢測系統會開啟一個其他的slave作為新的master,其他的slave將以新的master來應用數據
4.配置文件提供者:當客戶端進行連接的時候,檢測系統會請求master的地址,響應服務,如果有失敗出現,檢測系統會提供新的master
running sentinel:
1.redis-sentinel /path/to/sentinel.conf
2.redis-server /path/to/sentinel.conf --sentinel
檢測系統默認使用26379端口。檢測系統會默認使用配置文件來開啟服務,配置文件需要有可寫的權限。
adding or removing sentinels:
A:redis的自動發現功能,會在添加sentinel后,自動接收數據,只需要在master上添加一個sentinel即可
如果要添加多個sentinel,需要一個一個的添加,當之前添加的sntinel可以接受數據后,再添加下一個
B:1.停止想要移除的sentinel程序
2.使用 SENTINEL RESET * 來執行需要移除的mater的tentinel
3.確保所有的sentinel可以發現目前所使用的sentinel的狀態---SENTINEL MASTER mastername
removing the old master or unreachable slave:
slaves priority:
slave-priority,1.如果其值被設置為0,那么slave將永遠不會被選作master
2.sentinel優先選擇slave priority值較小的作為master