Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 52f16c0

Browse filesBrowse files
committed
redisdb 支持统计redis使用情况
1 parent c30f996 commit 52f16c0
Copy full SHA for 52f16c0

1 file changed

+72Lines changed: 72 additions & 0 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎feapder/db/redisdb.py‎

Copy file name to clipboardExpand all lines: feapder/db/redisdb.py
+72Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,3 +849,75 @@ def _reconnect(self):
849849

850850
def __getattr__(self, name):
851851
return getattr(self._redis, name)
852+
853+
def current_status(self, show_key=True, filter_key_by_used_memory=10 * 1024 * 1024):
854+
"""
855+
统计redis当前使用情况
856+
Args:
857+
show_key: 是否统计每个key的内存
858+
filter_key_by_used_memory: 根据内存的使用量过滤key 只显示使用量大于指定内存的key
859+
860+
Returns:
861+
862+
"""
863+
from prettytable import PrettyTable
864+
from tqdm import tqdm
865+
866+
status_msg = ""
867+
868+
print("正在查询最大连接数...")
869+
clients_count = self._redis.execute_command("info clients")
870+
max_clients_count = self._redis.execute_command("config get maxclients")
871+
status_msg += ": ".join(max_clients_count) + "\n"
872+
status_msg += clients_count + "\n"
873+
874+
print("正在查询整体内存使用情况...")
875+
total_status = self._redis.execute_command("info memory")
876+
status_msg += total_status + "\n"
877+
878+
if show_key:
879+
print("正在查询每个key占用内存情况等信息...")
880+
table = PrettyTable(
881+
field_names=[
882+
"type",
883+
"key",
884+
"value_count",
885+
"used_memory_human",
886+
"used_memory",
887+
],
888+
sortby="used_memory",
889+
reversesort=True,
890+
header_style="title",
891+
)
892+
893+
keys = self._redis.execute_command("keys *")
894+
for key in tqdm(keys):
895+
key_type = self._redis.execute_command("type {}".format(key))
896+
if key_type == "set":
897+
value_count = self._redis.scard(key)
898+
elif key_type == "zset":
899+
value_count = self._redis.zcard(key)
900+
elif key_type == "list":
901+
value_count = self._redis.llen(key)
902+
elif key_type == "hash":
903+
value_count = self._redis.hlen(key)
904+
elif key_type == "string":
905+
value_count = self._redis.strlen(key)
906+
elif key_type == "none":
907+
continue
908+
else:
909+
raise TypeError("尚不支持 {} 类型的key".format(key_type))
910+
911+
used_memory = self._redis.execute_command("memory usage {}".format(key))
912+
if used_memory >= filter_key_by_used_memory:
913+
used_memory_human = (
914+
"%0.2fMB" % (used_memory / 1024 / 1024) if used_memory else 0
915+
)
916+
917+
table.add_row(
918+
[key_type, key, value_count, used_memory_human, used_memory]
919+
)
920+
921+
status_msg += str(table)
922+
923+
return status_msg

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.