@@ -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