如何在命令行轻松批量删除Redis缓存Keys

Redis环境需求:7.0+

今天在跟踪服务器状态时候,发现redis内存占用量居高不下,进去查看后得知是因为写入的keys高达数十万条记录,甚至还包含了几万条弃用keys,为了能够快速批量删除这些废弃数据,我通过百度查询,发现redis7.0以后允许通过lua函数在内部直接运行。

由于我的redis环境在docker里面,无法直接通过宿主机运行redis-cli,因此就选择使用lua函数以及redis的新特性FUNCTION LOAD注册一个批量删除键的函数

得益于csdn上面@高佬林的文章启发,改进了其中代码,实现调用函数名称快速批量删除keys的操作

进入redis当中,运行以下命令以注册一个libray名称batchlib 函数名称为rmfunc的函数

FUNCTION LOAD "#!lua name=batchlib \n redis.register_function('rmfunc', function(keys, args) \n redis.call('echo', args[1]) \n local hashKeys = redis.call('keys', args[1]) \n for i, v in ipairs(hashKeys) do \n redis.call('del', v) \n redis.call('echo', v) \n end \n end)"

函数注册成功后,将在命令行输出libray的名称

如果已经存在相同的library,那么会得到如下错误 

 查看已经注册的library及函数列表则运行

FUNCTION LIST

运行结果如下

 调用方法开始执行批量删除

FCALL rmfunc 0 "keyprefix*"

keyprefix 为你需要批量删除的key前缀,中间可以使用多个通配符匹配。

可以看到,删除结束后并没有删除key的过程输出,直接返回了(nil) ,不要怀疑,相关的key已经被删除,你可以进行实时验证匹配。

如果想要移除这个library ,那么只需要简单运行以下命令即可

FUNCTION DELETE batchlib

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追寻自由的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值