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

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

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

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

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

我的方法是运行类似于:

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:*

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

我的主要问题是我找不到一个类似 cli 命令的 redis 服务器命令来查找一个密钥的内存使用情况。

问题:

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

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

点赞
用户3160475
用户3160475

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

注意:即使处于离线状态,你应该在 Lua 脚本中使用 SCAN 而不是 KEYS - 这将减少脚本的运行时内存消耗并防止沙盒的堆栈溢出。

2019-01-15 12:52:31