Redis客戶端連線數DevOps
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) ""
相關文章
- Redis客戶端連線Redis客戶端
- mysql、redis 客戶端連線池MySqlRedis客戶端
- impala客戶端連線客戶端
- linux之客戶端連線數統計Linux客戶端
- vncserver建立與客戶端連線VNCServer客戶端
- 從客戶端連線ASM例項客戶端ASM
- Redis-客戶端Redis客戶端
- redis客戶端管理Redis客戶端
- Redis處理客戶端連線的內部實現機制RXRedis客戶端
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- Oracle客戶端連線伺服器教程Oracle客戶端伺服器
- 客戶端連線資料庫的方法客戶端資料庫
- 客戶端連線故障檢查流程手段客戶端
- redis客戶端的使用Redis客戶端
- Redis C客戶端APIRedis客戶端API
- 【Azure Redis】Lettuce客戶端遇見連線Azure Redis長達15分鐘的超時Redis客戶端
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- 使用 WebSocket 客戶端連線 MQTT 伺服器Web客戶端MQQT伺服器
- 客戶端怎麼連線到伺服器?客戶端伺服器
- 配置ORACLE 客戶端連線到資料庫Oracle客戶端資料庫
- MySQL client客戶端的四種連線方式MySqlclient客戶端
- Redis介紹 && Java客戶端操作RedisRedisJava客戶端
- redis:常用客戶端命令(redis-cli)Redis客戶端
- netty建立數萬客戶端連線,並主動發訊息Netty客戶端
- 初探 Redis 客戶端 Lettuce:真香!Redis客戶端
- PL/SQL developer 遠端連線資料庫 客戶端配置SQLDeveloper資料庫客戶端
- HTTP客戶端連線,選擇HttpClient還是OkHttp?HTTP客戶端client
- ESP作為單連線中的TCP客戶端TCP客戶端
- 配置TimesTen客戶端連線[TimesTen運維]客戶端運維
- 客戶端連線RAC報ora-12545客戶端
- 8i客戶端不能連線9i?客戶端
- Presto學習筆記——Go客戶端連線PrestoREST筆記Go客戶端
- php連結nsq客戶端PHP客戶端
- Redis客戶端選型再分析Redis客戶端
- Windows下安裝redis客戶端WindowsRedis客戶端
- day03-Redis的客戶端Redis客戶端
- 客戶端段建立到伺服器端的連線過程客戶端伺服器
- oracle客戶端連線server 端, tnsnames的三種設定方式Oracle客戶端Server