mirror of
https://github.com/d0zingcat/redis-keys-statistics.git
synced 2026-05-13 23:16:53 +00:00
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
import heapq
|
|
|
|
def format_memory_size(size):
|
|
if size < 1024:
|
|
return f"{size: .2f} B"
|
|
elif size < 1024 * 1024:
|
|
return f"{size / 1024:.2f} KB"
|
|
elif size < 1024 * 1024 * 1024:
|
|
return f"{size / (1024 * 1024):.2f} MB"
|
|
else:
|
|
return f"{size / (1024 * 1024 * 1024):.2f} GB"
|
|
|
|
|
|
def update_topk_heap(item, min_heap, heap_size):
|
|
heapq.heappush(min_heap, (item[2], item))
|
|
if len(min_heap) > heap_size:
|
|
heapq.heappop(min_heap)
|
|
|
|
|
|
def update_statistics(item, prefix_statistics_map):
|
|
key = item[0]
|
|
key_type = item[1]
|
|
memory = int(item[2])
|
|
ttl = item[3]
|
|
|
|
if b':' in key:
|
|
key_prefix = key.split(b':')[0]
|
|
if key_prefix not in prefix_statistics_map:
|
|
prefix_statistics_map[key_prefix] = {}
|
|
prefix_statistics_map[key_prefix]['count'] = 0
|
|
prefix_statistics_map[key_prefix]['total_size'] = 0
|
|
prefix_statistics_map[key_prefix]['max_ttl'] = -1
|
|
prefix_statistics_map[key_prefix]['type_count'] = {}
|
|
prefix_statistics_map[key_prefix]['count'] += 1
|
|
prefix_statistics_map[key_prefix]['total_size'] += memory
|
|
prefix_statistics_map[key_prefix]['max_ttl'] = max(prefix_statistics_map[key_prefix]['max_ttl'], ttl)
|
|
|
|
if key_type not in prefix_statistics_map[key_prefix]['type_count']:
|
|
prefix_statistics_map[key_prefix]['type_count'][key_type] = 0
|
|
prefix_statistics_map[key_prefix]['type_count'][key_type] += 1 |