Redis命令的大致运行流程是,由客户端向服务器发起命令,在服务器运行该命令,得到结果后再把结果返回给客户端。
在实际项目的场景里,一方面可能会通过各种命令观察服务器的配置和运行状态,以此排查和分析实际的问题,另一方面还有可能通过修改各种配置来实现调优的效果。此外,客户端和服务器的对应关系更有可能是一对多的,即多个客户端同时连到一台服务器上。在本文里,将围绕上述实践要点给出Redis服务器和客户端的常用命令以及实践技能。
可以通过client getname
命令来获取客户端的名字,也可以通过client setname
命令来设置客户端的名字。
127.0.0.1:6379> client getname
(nil)
127.0.0.1:6379> client setname redis01
OK
127.0.0.1:6379> client getname
"redis01"
通过client list
命令能看到当前所有连接到服务器的客户端信息
127.0.0.1:6379> client list
id=3 addr=127.0.0.1:47312 laddr=127.0.0.1:6379 fd=9 name=redis01 age=24364 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=40928 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 events=r cmd=client user=default redir=-1
如果当前Redis服务器负载过大,就可以通过client pause
命令暂停执行来自客户端的命令
client pause timeout
timeout表示暂停的时间,单位为毫秒
client kill [ip:port]
使用时可先使用client list
查看客户端ip及端口
shutdown
命令会终止服务器上的所有客户端连接,并终止服务器。
127.0.0.1:6379> shutdown
通过本节给出的info等命令,大家不仅能查看服务器的详细信息,还能观察到服务器所包含命令的详细信息。遇到问题时,可以先用info命令查看客户端、CPU和内存等的相关数据,这样或许能看到一些问题的线索。
通过info命令能查看当前服务器server部分的相关信息
127.0.0.1:6379> info
# Server
redis_version:6.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:65331e5b3926860f
redis_mode:standalone
os:Linux 4.19.12-1.el7.elrepo.x86_64 x86_64
arch_bits:64
monotonic_clock:POSIX clock_gettime
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:1364
process_supervised:no
run_id:f8d152a7d5084861b459def410600788c6f1f653
tcp_port:6379
server_time_usec:1687343636684564
uptime_in_seconds:27619
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:9622036
executable:/root/redis-6.2.12/redis-server
config_file:/root/redis-6.2.12/redis.conf
io_threads_active:0
在info后面加上Clients参数就能看到客户端的连接状况
127.0.0.1:6379> info Clients
# Clients
connected_clients:1
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:24
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0
connected_clients:1
表示正在连接的客户端数量
运行info Stat
命令,在返回结果里有一项rejected_connections
,表示因超过最大连接数而被拒绝的客户端连接次数,如果该数值很大,就说明有大量的客户端无法连接上,这可能会影响性能。
127.0.0.1:6379> info Stats
可以增大"maxclients"参数
可通过config get maxclients
查看最大连接数
127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "10000"
127.0.0.1:6379> info Stats
instantaneous_ops_per_sec:0
返回结果里有一项表示当前每秒执行多少指令的instantaneous_ops_per_sec
参数
可以通过info memory
命令观察当前Redis服务器的内存使用情况
127.0.0.1:6379> info memory
used_memory_human:858.02K
used_memory_peak_human:912.77K
used_memory_lua_human:30.00K
used_memory_scripts_human:0B
mem_clients_slaves:0
command
命令会返回Redis命令的信息
127.0.0.1:6379> command -
统计当前Redis服务器命令个数
127.0.0.1:6379> command count
可以通过command info
命令查看指定命令的详细信息
command info key [key...]
127.0.0.1:6379> COMMAND INFO set
1) 1) "set"
2) (integer) -3
3) 1) write
2) denyoom
4) (integer) 1
5) (integer) 1
6) (integer) 1
7) 1) @write
2) @string
3) @slow
通过command getkeys
命令能获取指定命令的所有键
127.0.0.1:6379> COMMAND GETKEYS mset name004 004 age004 400
1) "name004"
2) "age004"
127.0.0.1:6379> COMMAND GETKEYS set name005 005
1) "name005"
之前在启动Redis服务器时用到的都是默认的配置,所以连接密码和端口等参数都是默认的。除此之外,还能通过命令来修改服务器的配置,从而实现基于项目的定制化效果。
可以通过config get命令来查看服务器的配置
config get *
config get p*
第一行是查看所有配置
第二行是查看以p开头的配置
通过config set命令能修改服务器的配置
127.0.0.1:6379> CONFIG SET requirepass 123456
通过命令修改无需重启即可生效,但会在重启后失效
登陆后输入auth 123456
即可操作
用config set
命令修改的配置项会在Redis服务器重启后失效,如果想让修改后的配置项一直生效,则需要在config set
命令后运行config rewrite
命令
127.0.0.1:6379> config set requirepass 123456
OK
127.0.0.1:6379> config rewrite
在之前的范例中,Redis服务器和客户端是在同一个Docker容器中的,即用本地的Redis客户端连接本地的Redis服务器。在实际的项目里,作为Redis客户端的应用程序往往会连接到远端(非本地)的Redis服务器上,而且一个Redis服务器上会有多个Redis客户端连接。
连接远端服务器:
redis-cli -h > -p > -P > -u > -p >