Redis redis-cli客戶端和數據與恢復遷移

一、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

 

參考文章:

Redis系列-遠程連接redis

Redis內存回收機制

redis info 詳解

—— Stay Hungry. Stay Foolish. 求知若飢,虛心若愚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章