如何找到Redis主题的大小(键的子集)?

时间:2019-01-15 12:37:29

标签: redis lua

我的redis键使用各种主题(例如Topic:SubTopic:Key)进行排序。

我想找到Topic:*Topic:SubTopic:*节的字节大小。

在一个主题下,我可以拥有各种条目(列表,字符串,哈希,集合等)。

现在,我知道cli具有memory usage <key>命令,但是我想以某种方式使用lua在redis服务器上调用它。

我的方法是运行类似的内容

eval "local keys = redis.call('keys',KEYS[1]) ; local sum=0 ; for _,k in ipairs(keys) do sum = sum + redis.call('memory usage', k) end ; return sum" 1 Topic:SubTopic:*

我知道此命令会影响性能,因此我将离线运行此命令只是为了分析我们的数据结构,而不是在生产环境中。

我的主要问题是我找不到Redis服务器命令来查找类似于cli命令的键的内存使用情况。

问题:

  1. 是否有更好的方法来分析我的钥匙?使用bigkeys是不够的。

  2. 如果没有,我是否可以在lua脚本中运行任何等效的内存使用命令来获取密钥的字节大小?

1 个答案:

答案 0 :(得分:1)

您可以调用MEMORY USAGE来获取字节大小,包括给定键和值的开销。

注意:即使离线运行,也应在Lua脚本中使用SCAN而不是KEYS-这样可以减少脚本的运行时内存消耗,并防止沙箱堆栈溢出。