Redis批量删除指定前缀的key

时间:2025-03-18 15:35:01

    在redis-cli中键入命令,批量删除前缀为business_login_tokens:的key:

eval "return ('del', unpack(('keys', ARGV[1])))" 0 'business_login_tokens:*'



    在Redis中,EVAL命令用于执行Lua脚本。这个特定的命令是用来批量删除具有特定前缀的键的。下面是这个命令的详细解释

  • EVAL: 这是Redis命令,用于执行一个Lua脚本。
  • return ('del', unpack(('keys', ARGV[1]))): 这是Lua脚本的内容。
    • ('del', ...):调用Redis的DEL命令来删除一个或多个键。...表示这里将传入一个或多个键作为参数。
    • unpack(('keys', ARGV[1])): 在执行DEL命令之前,首先通过('keys', ARGV[1])调用查找所有匹配ARGV[1]模式的键。ARGV[1]是Lua脚本中的参数,代表从外部传入的第一个参数。keys命令返回的是一个包含所有匹配键名的数组。unpack函数则用来将这个数组展开成一系列单独的参数传递给DEL命令。
  • 0: 这个数字是Lua脚本的参数数量的计数。在这个例子中,因为我们在脚本内部直接使用了ARGV[1],所以外部传递给EVAL命令的参数实际上只有一个(即键的模式),因此计数为0。但这里可能存在混淆,通常如果直接使用ARGV的话,这里的计数应与ARGV中实际使用的参数数目对应,因此正确的计数应该是1而不是0,表示有一个外部参数传递给了脚本。
  • 'business_login_tokens:*': 这是传递给Lua脚本的实际参数,即ARGV[1]的内容。它是一个模式,表示所有以business_login_tokens:为前缀的键。这些键将会被前面提到的Lua脚本找到并删除。

        综上所述,整个命令的作用是删除所有以business_login_tokens:为前缀的键。这是一种清理特定类型缓存条目的高效方式,但需要注意的是,在生产环境中直接使用KEYS命令可能会影响性能,特别是在大数据集上,因为它会遍历整个数据库。因此,这种操作更适用于维护任务或者数据量可控的情况。对于大规模操作,建议使用更安全和高效的方法,如SCAN命令配合Lua脚本来逐步处理。