mirror of
https://github.com/d0zingcat/redis-keys-statistics.git
synced 2026-05-13 15:09:57 +00:00
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
from prettytable import PrettyTable
|
|
from .analysis import format_memory_size
|
|
|
|
def analyze_redis_keys(min_heap, prefix_statistics_map, total_key_size, total_key_count, key_count_by_type, db_num, use_pretty):
|
|
|
|
average_key_size = total_key_size / total_key_count if total_key_count != 0 else 0
|
|
|
|
print("\n" + "-"*25 + f"\nAnalyzing DB {db_num}\n" + "-"*25 + "\n")
|
|
|
|
table = PrettyTable()
|
|
table.title = "Top 20 largest keys in Redis"
|
|
table.field_names = ["Key", "Type", "Size", "Size Ratio", "TTL"]
|
|
|
|
sorted_items = sorted(min_heap, key=lambda x: x[0], reverse=True)
|
|
|
|
for value, item in sorted_items:
|
|
key = item[0]
|
|
key_type = item[1]
|
|
memory = int(item[2])
|
|
ttl = item[3]
|
|
|
|
size_increase_percentage = (memory - average_key_size) / average_key_size * 100
|
|
formatted_size_ratio = "{:.1f}% ↑".format(size_increase_percentage)
|
|
|
|
if use_pretty:
|
|
memory = format_memory_size(memory)
|
|
|
|
table.add_row([key.decode('utf-8', errors='ignore'), key_type.decode('utf-8'), memory, formatted_size_ratio, ttl])
|
|
|
|
print(table)
|
|
|
|
table = PrettyTable()
|
|
table.title = "Key Count by Type"
|
|
table.field_names = ["Type", "Count"]
|
|
|
|
for key_type, count in key_count_by_type.items():
|
|
table.add_row([key_type.decode('utf-8', errors='ignore'), count])
|
|
|
|
print(table)
|
|
|
|
table = PrettyTable()
|
|
table.title = "Detailed Prefix Statistics"
|
|
table.field_names = ["Prefix Name", "Count", "Average Size", "Max TTL", "Types"]
|
|
|
|
for prefix, item in prefix_statistics_map.items():
|
|
|
|
prefix_average_size = round(item['total_size'] / item['count'], 2) if item['count'] != 0 else 0
|
|
|
|
if use_pretty:
|
|
prefix_average_size = format_memory_size(prefix_average_size)
|
|
|
|
types = ""
|
|
for key_type, type_count in item['type_count'].items():
|
|
types += " - Type: {}, Count: {}\n".format(key_type.decode('utf-8'), type_count)
|
|
table.add_row([prefix.decode('utf-8', errors='ignore'), item['count'], prefix_average_size, item['max_ttl'], types])
|
|
|
|
print(table) |