redis-cli是原生Redis自带的命令行工具,可以帮助您通过简单的命令连接Redis实例,进行数据管理。
1、连接方法
redis-cli -h
选项 说明
-h Redis实例的连接ip地址。
-p Redis实例的服务端口。
-a Redis实例的连接密码。为了提高安全性,您可以不设置该选项,在执行连接命令后再输入auth
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之所以这样的设计有两个原因:
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
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"
参看配置使用的是 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 : 已连接客户端信息,包含以下域:
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
如果fd=-1代表当前客户端不是外部客户端,而是Redis内部的伪装客户端。
内核(kernel)利用文件描述符(file descriptor)来识别文件。
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. 求知若饥,虚心若愚。