redis的bigkeys命令之原理
生活随笔
收集整理的這篇文章主要介紹了
redis的bigkeys命令之原理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡言
1. 想要統計分析redis中的大key,使用redis的命令 bigkeys 是個比較簡潔的辦法
2. bigkeys的原理其實很簡單,就是分多次遍歷整個redis的所有key,計算各個key的大小(一般是元素數)
?
源代碼如下(筆者的redis版本:5.0.1)
// 計算各個類型的方法,可以看到不同的類型用了不同的辦法求其長度,并非真正的內存占用 // string : 字符串長度 // list : 列表長度 // set : 元素個數 // hash : 元素個數 // zset : 元素個數 // stream : 元素個數 typeinfo type_string = { "string", "STRLEN", "bytes" }; typeinfo type_list = { "list", "LLEN", "items" }; typeinfo type_set = { "set", "SCARD", "members" }; typeinfo type_hash = { "hash", "HLEN", "fields" }; typeinfo type_zset = { "zset", "ZCARD", "members" }; typeinfo type_stream = { "stream", "XLEN", "entries" }; typeinfo type_other = { "other", NULL, "?" };// 查找大key的函數 static void findBigKeys(int memkeys, unsigned memkeys_samples) {unsigned long long sampled = 0, total_keys, totlen=0, *sizes=NULL, it=0;redisReply *reply, *keys;unsigned int arrsize=0, i;dictIterator *di;dictEntry *de;typeinfo **types = NULL;double pct;dict *types_dict = dictCreate(&typeinfoDictType, NULL);typeinfo_add(types_dict, "string", &type_string);typeinfo_add(types_dict, "list", &type_list);typeinfo_add(types_dict, "set", &type_set);typeinfo_add(types_dict, "hash", &type_hash);typeinfo_add(types_dict, "zset", &type_zset);typeinfo_add(types_dict, "stream", &type_stream);....... }?
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的redis的bigkeys命令之原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装使用大key工具rdb_bigkey
- 下一篇: 一步一步理解Paxos算法