首页 > 解决方案 > 如何找到 redis 主题(键的子集)的大小?

问题描述

我的 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 脚本的一部分运行以获取密钥的字节大小?

标签: redislua

解决方案


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

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


推荐阅读