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. 求知若饥,虚心若愚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值