一、redis-cli客戶端
redis-cli是原生Redis自帶的命令行工具,可以幫助您通過簡單的命令連接Redis實例,進行數據管理。
1、連接方法
redis-cli -h <host> -p <port> -a <password>
選項 說明
-h Redis實例的連接ip地址。
-p Redis實例的服務端口。
-a Redis實例的連接密碼。爲了提高安全性,您可以不設置該選項,在執行連接命令後再輸入auth <password>密碼驗證。
2、與連接操作相關的命令
quit:關閉連接(connection)
auth:簡單密碼認證
3、持久化相關
save:將數據同步保存到磁盤
bgsave:將數據異步保存到磁盤
lastsave:返回上次成功將數據保存到磁盤的Unix時戳
shundown:將數據同步保存到磁盤,然後關閉服務
4、遠程服務控制相關
info:提供服務器的信息和統計
monitor:實時轉儲收到的請求
slaveof:改變複製策略設置
config:在運行時配置Redis服務器
1) INFO 命令會列出當前連接的 Redis實例的所有指標信息,這些指標包括:
(1)監控內存的使用情況: info memory 查看
Redis內存的回收機制:通過它修改 maxmemory-policy 默認是noeviction策略
Redis有自己的內存分配器,當key-value對象被移除時,Redis不會馬上向操作系統釋放其佔用內存。
Redis之所以這樣的設計有兩個原因:
- OS可能會將釋放內存交換到虛擬內存,但OS的虛擬內存又是物理文件,其IO讀寫效率較低,從而影響Redis性能表現
- OS的虛擬內存換入換出是基於Page機制,同一Page內的部分數據對象被釋放,但其他數據對象依然被其他應用使用中,導致在該Page內的Redis對象並不會被釋放
192.168.198.20:6379> info memory
# Memory
used_memory:853608
used_memory_human:833.60K
used_memory_rss:2691072
used_memory_rss_human:2.57M
used_memory_peak:853608
used_memory_peak_human:833.60K
used_memory_peak_perc:100.01%
used_memory_overhead:841342
used_memory_startup:791432
used_memory_dataset:12266
used_memory_dataset_perc:19.73%
allocator_allocated:1136024
allocator_active:1396736
allocator_resident:4050944
total_system_memory:1019826176
total_system_memory_human:972.58M
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:allkeys-lru
allocator_frag_ratio:1.23
allocator_frag_bytes:260712
allocator_rss_ratio:2.90
allocator_rss_bytes:2654208
rss_overhead_ratio:0.66
rss_overhead_bytes:-1359872
mem_fragmentation_ratio:3.31
mem_fragmentation_bytes:1878480
mem_not_counted_for_evict:104
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:104
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
2)config 命令可以設置/獲取服務器的對應配置參數(是臨時修改)
使用config set 命令設置和修改配置參數只是臨時修改,可以使用 config rewrite 命令把當前的服務器參數永久寫入到配置文件中。如果永久修改推薦去配置文件修改。
192.168.198.20:6379> config get port
1) "port"
2) "6379"
192.168.198.20:6379> config get loglevel
1) "loglevel"
2) "notice"
192.168.198.20:6379> config set loglevel debug
OK
192.168.198.20:6379> config rewrite
OK
192.168.198.20:6379> config set loglevel notice
OK
192.168.198.20:6379> config rewrite
OK
二、Redis服務器的配置文件擴展
1、Redis的配置文件中,可以使用 include指令來包含另一個配置文件。
將公共的配置放入到一個公共的配置文件中,然後通過子配置文件引入父配置,可以將文件中的內容配置按照模塊分開。
注意:“include”選項不會被來自admin或Redis Sentinel的“CONFIG REWRITE”重寫掉。如果多個文件對同選項作了設置。Redis總是使用最後一次的設置,
因此你最好把”include”放在文件的開始處,以避免在運行時被後面的文件重寫。如果相反,你希望使用”include”來覆蓋這些配置選項,最好把它放在文章的結尾。
測試:
1)我們把 loglevel 和 logfile 寫到 redis_log.config 文件中:
[root@centos7 u_redis]# touch redis_log.conf
[root@centos7 u_redis]# touch redis.log
[root@centos7 u_redis]# cat redis_log.conf
loglevel debug
logfile "/usr/local/redis/redis.log"
[root@centos7 u_redis]# ll
總用量 68
drwxr-xr-x 2 u_redis g_redis 44 5月 13 10:17 redis
-rw-r--r-- 1 u_redis g_redis 61868 5月 13 10:27 redis.conf
-rw-r--r-- 1 root root 0 5月 13 10:41 redis.log
-rw-r--r-- 1 root root 52 5月 13 10:40 redis_log.conf
drwxr-xr-x 2 u_redis g_redis 28 5月 13 10:02 run
2)在 redis.config中末尾配置 include指令。
然後重啓,ok
192.168.198.20:6379> config get loglevel
1) "loglevel"
2) "debug"
192.168.198.20:6379> config get logfile
1) "logfile"
2) "/usr/local/redis/redis.log"
三、Redis備份與恢復
參看配置使用的是 RDB還是AOF 持久化以及它們的文件名字,然後複製他們備份。下面以 AOF 持久化操作
1)複製備份數據到安全的地方,名字自定義
[root@centos7 u_redis]# cp ./redis/appendonly.aof ./
2)刪除數據文件,重啓查看,數據爲空
[root@centos7 u_redis]# rm -rf ./redis/appendonly.aof
3)恢復備份數據,把備份的數據文件複製到原來的位置並設置正確的權限,注意文件名要和配置文件的一致,
[root@centos7 u_redis]# cp ./appendonly.aof ./redis/
[root@centos7 u_redis]# chown u_redis:g_redis ./redis/appendonly.aof
[root@centos7 u_redis]# ll ./redis/
總用量 8
-rw-r--r-- 1 u_redis g_redis 368 5月 13 11:01 appendonly.aof
4)重啓查看,數據ok
192.168.198.20:6379> keys *
1) "k1"
2) "k2"
3) "kmax3"
四、單機版數據遷移
有時候可能會需要將一個redis服務器的數據,複製到另一個redis服務器上去,實現方式有很多。
1、通過主從複製來實現
啓動兩個主服務器a和b
在b的客戶端上執行命令(b作爲a的從服務器,自動同步):
> slaveof 192.168.198.10 6379 //a的ip地址和端口號
同步完成了以後:
> slaveof no one //恢復主服務器的身份
可以通過 info命令查看主從複製信息
2、通過上面的(三、Redis備份與恢復)實現
兩個主服務器a和b,查看其持久化的方式,然後把數據文件複製過去就ok。
五、管理連接上來的客戶端
1、info clients 查看客戶端狀態和指標
192.168.198.20:6379> info clients
# Clients
connected_clients:2
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
clients : 已連接客戶端信息,包含以下域:
- connected_clients : 已連接客戶端的數量(不包括通過從屬服務器連接的客戶端)
- client_longest_output_list : 當前連接的客戶端當中,最長的輸出列表
- client_longest_input_buf : 當前連接的客戶端當中,最大輸入緩存
- blocked_clients : 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客戶端的數量
2、info stats 查看客戶端指標更詳細
192.168.198.20:6379> info stats
# Stats
total_connections_received:2
total_commands_processed:7
instantaneous_ops_per_sec:0
total_net_input_bytes:192
total_net_output_bytes:23330
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
total_commands_processed
redis處理的命令數
instantaneous_ops_per_sec
redis內部實時的每秒執行的命令數
total_net_input_bytes
redis網絡入口流量字節數
total_net_output_bytes
redis網絡出口流量字節數
instantaneous_input_kbps
redis網絡入口kps
instantaneous_output_kbps
redis網絡出口kps
rejected_connections
拒絕的連接個數,redis連接個數達到maxclients限制,拒絕新連接的個數
sync_full
主從完全同步成功次數
sync_partial_ok
主從部分同步成功次數
sync_partial_err
主從部分同步失敗次數
expired_keys
運行以來過期的key的數量
expired_stale_perc
過期的比率
expired_time_cap_reached_count
過期計數
evicted_keys
運行以來剔除(超過了maxmemory後)的key的數量
keyspace_hits
命中次數
在獲取數據的時候,會判斷key是否存在,如果存在keyspace_hits++,如果不存在keyspace_misses++
keyspace_misses
沒命中次數
pubsub_channels
當前使用中的頻道數量
pubsub_patterns
當前使用的模式的數量
latest_fork_usec
最近一次fork操作阻塞redis進程的耗時數,單位微秒
migrate_cached_sockets
是否已經緩存了到該地址的連接
slave_expires_tracked_keys
從實例到期key數量
active_defrag_hits
主動碎片整理命中次數
active_defrag_misses
主動碎片整理未命中次數
active_defrag_key_hits
主動碎片整理key命中次數
active_defrag_key_misses
主動碎片整理key未命中次數
3、client list 查看每個連接的詳情
192.168.198.20:6379> client list
id=4 addr=192.168.198.172:60652 fd=9 name= age=295 idle=295 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=command
id=6 addr=192.168.198.172:60656 fd=8 name= age=7 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
- id:客戶端連接的唯一標識,這個id是隨着Redis的連接自增的,重啓Redis後會重置爲0
- addr : 客戶端的地址和端口
- fd : socket的文件描述符,與lsof命令結果中的fd是同一個,
如果fd=-1代表當前客戶端不是外部客戶端,而是Redis內部的僞裝客戶端。
內核(kernel)利用文件描述符(file descriptor)來識別文件。
- name:客戶端的名字
- age : 以秒計算的已連接時長
- idle : 以秒計算的空閒時長
- flags : 客戶端 flag
- db : 該客戶端正在使用的數據庫 ID
- sub : 已訂閱頻道的數量
- psub : 已訂閱模式的數量
- multi : 在事務中被執行的命令數量
- qbuf : 輸入緩衝區的長度(字節爲單位, 0 表示沒有分配輸入緩衝區)
- qbuf-free : 輸入緩衝區剩餘空間的長度(字節爲單位, 0 表示沒有剩餘空間)
4、終止某客戶端連接,可以使用:CLIENT KILL ip:port
從Redis 2.8.12開始,這個命令改爲如下格式:
CLIENT KILL ADDR ip:port. 和舊版的三個參數時的行爲完全一樣。
CLIENT KILL ID client-id. 可以通過唯一ID字段殺死一個客戶端,唯一ID可以通過Redis2.8.12的CLIENT LIST命令查詢。
CLIENT KILL TYPE type, 這裏的 type 可以是 normal, slave, pubsub。 這將關閉所有特殊類的客戶端。
192.168.198.20:6379> client kill id 4
(integer) 1
192.168.198.20:6379> client list
id=6 addr=192.168.198.172:60656 fd=8 name= age=455 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
參考文章:
—— Stay Hungry. Stay Foolish. 求知若飢,虛心若愚。