Redis客户端连接
redis通过监听一个TCP端口或socket的方式接收来自客户端的连接, 当与客户端建立连接后,redis内部会进行如下操作:
(1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞多路复用模型;
(2)然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法;
(3)然后创建一个可读的文件事件用于监听这个客户端socket的数据发送。
查看连接数
#info clients可以查看当前的redis连接数
127.0.0.1:6379> info clients
# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
#config get maxclients 可以查询redis允许的最大连接数
127.0.0.1:6379> CONFIG GET maxclients
1) "maxclients"
2) "10000"
设置连接数
1. 在2.6之后版本,可以修改最大连接数配置,默认10000,可以在redis.conf配置文件中修改
...
# maxclients 10000
...
2.config set maxclients num 可以设置redis允许的最大连接数
127.0.0.1:6379> CONFIG set maxclients 10
OK
127.0.0.1:6379>
3.启动redis.service服务时加参数--maxclients 100000来设置最大连接数限制
redis-server --maxclients 100000 -f redis.conf
操作客户端连接
#获取客户端列表
127.0.0.1:6379> CLIENT list
id=2 addr=127.0.0.1:60931 fd=9 name= age=5949 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=18446744073709537584 events=r cmd=client
id=3 addr=127.0.0.1:61097 fd=10 name= age=5883 idle=1950 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=18446744073709534128 events=r cmd=type
#查看和设置当前连接的名称
127.0.0.1:6379> CLIENT GETNAME
(nil)
127.0.0.1:6379> CLIENT setname l-a
OK
127.0.0.1:6379> CLIENT GETNAME
"l-a"
#关闭客户端连接
127.0.0.1:6379> CLIENT KILL id 3
(integer) 0
敲重点
如果上面的那些指令实在记不住怎么办?用下面的2个指令可以解决问题
info
127.0.0.1:6379> info
# Server
redis_version:3.2.100
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:dd26f1f93c5130ee
redis_mode:standalone
os:Windows
arch_bits:64
multiplexing_api:WinSock_IOCP
process_id:19228
run_id:64b3358bbd71d6366c4146f2114865739c108c69
tcp_port:6379
uptime_in_seconds:6539
uptime_in_days:0
hz:10
lru_clock:6903198
executable:C:\Users\Redis-x64-3.2.100\redis-server.exe
config_file:
# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:20032288
used_memory_human:19.10M
used_memory_rss:19994504
used_memory_rss_human:19.07M
used_memory_peak:24114464
used_memory_peak_human:23.00M
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.00
mem_allocator:jemalloc-3.6.0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1550400531
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:2
total_commands_processed:25
instantaneous_ops_per_sec:0
total_net_input_bytes:700
total_net_output_bytes:29430742
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
evicted_keys:0
keyspace_hits:2
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:0.19
used_cpu_user:0.41
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=84342,expires=0,avg_ttl=0
通过给定可选的参数 section ,可以让命令只返回某一部分的信息:
- server : 一般 Redis 服务器信息,包含以下域:
redis_version : Redis 服务器版本
redis_git_sha1 : Git SHA1
redis_git_dirty : Git dirty flag
os : Redis 服务器的宿主操作系统
arch_bits : 架构(32 或 64 位)
multiplexing_api : Redis 所使用的事件处理机制
gcc_version : 编译 Redis 时所使用的 GCC 版本
process_id : 服务器进程的 PID
run_id : Redis 服务器的随机标识符(用于 Sentinel 和集群)
tcp_port : TCP/IP 监听端口
uptime_in_seconds : 自 Redis 服务器启动以来,经过的秒数
uptime_in_days : 自 Redis 服务器启动以来,经过的天数
lru_clock : 以分钟为单位进行自增的时钟,用于 LRU 管理
- clients : 已连接客户端信息,包含以下域:
connected_clients : 已连接客户端的数量(不包括通过从属服务器连接的客户端)
client_longest_output_list : 当前连接的客户端当中,最长的输出列表
client_longest_input_buf : 当前连接的客户端当中,最大输入缓存
blocked_clients : 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
- memory : 内存信息,包含以下域:
used_memory : 由 Redis 分配器分配的内存总量,以字节(byte)为单位
used_memory_human : 以人类可读的格式返回 Redis 分配的内存总量
used_memory_rss : 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps等命令的输出一致。
used_memory_peak : Redis 的内存消耗峰值(以字节为单位)
used_memory_peak_human : 以人类可读的格式返回 Redis 的内存消耗峰值
used_memory_lua : Lua 引擎所使用的内存大小(以字节为单位)
mem_fragmentation_ratio : used_memory_rss 和 used_memory 之间的比率
mem_allocator : 在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc 。
在理想情况下, used_memory_rss 的值应该只比 used_memory 稍微高一点儿。
当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。
内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。
当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。
Because Redis does not have control over how its allocations are mapped to memory pages, high used_memory_rss is often the result of a
spike in memory usage.当 Redis 释放内存时,分配器可能会,也可能不会,将内存返还给操作系统。
如果 Redis 释放了内存,却没有将内存返还给操作系统,那么 used_memory 的值可能和操作系统显示的 Redis 内存占用并不一致。
查看 used_memory_peak 的值可以验证这种情况是否发生。
- persistence : RDB 和 AOF 的相关信息
loading:0 rdb_changes_since_last_save:1866 #自上次dump后rdb的改动
rdb_bgsave_in_progress:0 #标识rdb save是否进行中
rdb_last_save_time:1452048771 #上次save的时间戳
rdb_last_bgsave_status:ok #上次的save操作状态
rdb_last_bgsave_time_sec:0 #上次rdb save操作使用的时间(单位s)
rdb_current_bgsave_time_sec:-1 #如果rdb save操作正在进行,则是所使用的时间
aof_enabled:1 #是否开启aof,默认没开启(已开启)
aof_rewrite_in_progress:0 #标识aof的rewrite操作是否在进行中
aof_rewrite_scheduled:0 #标识是否将要在rdb save操作结束后执行
aof_last_rewrite_time_sec:0 #上次rewrite操作使用的时间(单位s)
aof_current_rewrite_time_sec:-1 #如果rewrite操作正在进行,则记录所使用的时间
aof_last_bgrewrite_status:ok #上次rewrite操作的状态
aof_last_write_status:ok #上次write操作的状态
aof_current_size:42820373 #aof当前大小,以字节(byte)为单位
aof_base_size:16223723 #aof上次启动或rewrite的大小
aof_pending_rewrite:0 #同上面的aof_rewrite_scheduled
aof_buffer_length:0 #aof buffer的大小
aof_rewrite_buffer_length:0 #aof rewrite buffer的大小
aof_pending_bio_fsync:0 #后台IO队列中等待fsync任务的个数
aof_delayed_fsync:41394 #延迟的fsync计数器 TODO
- stats : 一般统计信息
total_connections_received:61264941 #自启动起连接过的总数
total_commands_processed:951647408 #自启动起运行命令的总数
instantaneous_ops_per_sec:13 #每秒执行的命令个数 rejected_connections:0
#因为最大客户端连接书限制,而导致被拒绝连接的个数 sync_full:23 sync_partial_ok:0 sync_partial_err:0
expired_keys:40225836 #自启动起过期的key的总数 evicted_keys:0
#因为内存大小限制,而被驱逐出去的键的个数 keyspace_hits:54841673 #自启动起命中key的个数 keyspace_misses:344507 #自启动起未命中key的个数 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:8775
#上次的fork操作使用的时间(单位ms)
- replication : 主/从复制信息
role:master #角色(主从)
connected_slaves:1 #从库数量
slave0:ip=10.15.x.x,port=6379,state=online,offset=2230297606,lag=2
#从库信息 master_repl_offset:2230300129 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2229251554
repl_backlog_histlen:1048576
- cpu : CPU 计算量统计信息
used_cpu_sys:23111.87 #cpu在内核态所消耗的cpu的时间
used_cpu_user:17763.81 #cpu在用户态所消耗的cpu的时间
used_cpu_sys_children:7909.22 used_cpu_user_children:62767.11
- commandstats : Redis 命令统计信息
- cluster : Redis 集群信息
- keyspace : 数据库相关的统计信息
Keyspace
db0:keys=85904,expires=81390,avg_ttl=47463342
除上面给出的这些值以外,参数还可以是下面这两个:
all : 返回所有信息
default : 返回默认选择的信息
当不带参数直接调用 INFO 命令时,使用 default 作为默认参数。
CONFIG GET *
该命令会列出所有配置文件中配置的和默认的配置信息
127.0.0.1:6379> CONFIG GET *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) ""
5) "masterauth"
6) ""
7) "unixsocket"
8) ""
9) "logfile"
10) ""
11) "pidfile"
12) ""
13) "maxmemory"
14) "0"
15) "maxmemory-samples"
16) "5"
17) "timeout"
18) "0"
19) "auto-aof-rewrite-percentage"
20) "100"
21) "auto-aof-rewrite-min-size"
22) "67108864"
23) "hash-max-ziplist-entries"
24) "512"
25) "hash-max-ziplist-value"
26) "64"
27) "list-max-ziplist-size"
28) "-2"
29) "list-compress-depth"
30) "0"
31) "set-max-intset-entries"
32) "512"
33) "zset-max-ziplist-entries"
34) "128"
35) "zset-max-ziplist-value"
36) "64"
37) "hll-sparse-max-bytes"
38) "3000"
39) "lua-time-limit"
40) "5000"
41) "slowlog-log-slower-than"
42) "10000"
43) "latency-monitor-threshold"
44) "0"
45) "slowlog-max-len"
46) "128"
47) "port"
48) "6379"
49) "tcp-backlog"
50) "511"
51) "databases"
52) "16"
53) "repl-ping-slave-period"
54) "10"
55) "repl-timeout"
56) "60"
57) "repl-backlog-size"
58) "1048576"
59) "repl-backlog-ttl"
60) "3600"
61) "maxclients"
62) "10000"
63) "watchdog-period"
64) "0"
65) "slave-priority"
66) "100"
67) "min-slaves-to-write"
68) "0"
69) "min-slaves-max-lag"
70) "10"
71) "hz"
72) "10"
73) "cluster-node-timeout"
74) "15000"
75) "cluster-migration-barrier"
76) "1"
77) "cluster-slave-validity-factor"
78) "10"
79) "repl-diskless-sync-delay"
80) "5"
81) "tcp-keepalive"
82) "0"
83) "cluster-require-full-coverage"
84) "yes"
85) "no-appendfsync-on-rewrite"
86) "no"
87) "slave-serve-stale-data"
88) "yes"
89) "slave-read-only"
90) "yes"
91) "stop-writes-on-bgsave-error"
92) "yes"
93) "daemonize"
94) "no"
95) "rdbcompression"
96) "yes"
97) "rdbchecksum"
98) "yes"
99) "activerehashing"
100) "yes"
101) "protected-mode"
102) "yes"
103) "repl-disable-tcp-nodelay"
104) "no"
105) "repl-diskless-sync"
106) "no"
107) "aof-rewrite-incremental-fsync"
108) "yes"
109) "aof-load-truncated"
110) "yes"
111) "maxmemory-policy"
112) "noeviction"
113) "loglevel"
114) "notice"
115) "supervised"
116) "no"
117) "appendfsync"
118) "everysec"
119) "appendonly"
120) "no"
121) "dir"
122) "C:\\Users\\Redis-x64-3.2.100"
123) "save"
124) "jd 3600 jd 300 jd 60"
125) "client-output-buffer-limit"
126) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
127) "unixsocketperm"
128) "0"
129) "slaveof"
130) ""
131) "notify-keyspace-events"
132) ""
133) "bind"
134) ""