Redis——使用lua脚本模糊删除数据

前言

多多点赞,会变好看!

多多留言,会变有钱!

本文适用于Redis集群,是否适用单机模式未做测试!

一、创建lua脚本:

命名为clear_data.lua

Lua 复制代码
redis.call("select",0)

--游标的id
local cursor = 0
--查找删除的key的数量
local keyNum = 0
repeat
  --使用scan搜索,cursor=0的时候标识一个新的迭代期,服务器返回0的时候表示迭代已经结束
  local res = redis.call("scan",cursor,"MATCH",KEYS[1])
  if(res ~= nil and #res>=0) then
    cursor = tonumber(res[1])
    local ks = res[2]
    if(ks ~= nil and #ks>0) then
      redis.replicate_commands()
      --循环删除当前迭代器迭代出的数据
      for i=1,#ks,1 do
        local key = tostring(ks[i])
        --使用UNLINK删除,区别于del的是这个是异步执行的
        --这条指令要版本大于4.0.0 小于4.0.0就使用del
        redis.call("UNLINK",key)
      end
      --统计删除的key的数量
      keyNum = keyNum + #ks
    end
  end
--当服务器返回0的时候,跳出循环
until( cursor <= 0 )

return keyNum

二、执行命令

命令:/Redis路径/redis-cli -c -h IP -p 端口 --eval /脚本路径/clear_data.lua "模糊匹配值"

案例:/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 6379 --eval /root/clear_data.lua "*test??:*"

模糊匹配值一定要写正确,不然删错可就麻烦了!!

相关推荐
wuqingshun31415924 分钟前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
空中湖1 小时前
电池简史(五):极限之梦与终章——锂硫、锂空气、量子电池,以及你该知道的电池投资与生活指南
数据库·程序人生
蓝胖子酱2 小时前
在 Electron 中用 electron-store 实现加密存储与自定义格式文件
前端·javascript·数据库
snow@li3 小时前
Redis:数据库语法速查表 / 全景梳理
数据库·redis·缓存
Devlive 开源社区3 小时前
Nebula 1.6.0 发布:跨区域桶自动路由、秒传、文本/PDF 预览一次到位
数据库·sql
leonshi3 小时前
数据库关联表查询出重复数据的原因分析与解决
sql·重复数据
这个DBA有点耶3 小时前
导个数据中文全变问号?字符集这事儿真没那么简单
数据库·mysql·代码规范
wuqingshun3141594 小时前
MYSQL中如果发生死锁应该如何解决?
数据库·mysql
DO_Community4 小时前
Weaviate 托管数据库现已在 DigitalOcean 上开放公测
数据库·人工智能·开源·向量数据库·weaviate
报错小能手4 小时前
索引常见面试题
数据库