当前位置: 首页 > news >正文

服务器批量清理redis keys,无法适用客户端必须直连的情况

在 Redis 中,批量清理指定模式的键(例如 memberCardData:*)可以通过多种方法来实现。需要注意的是,Redis 的命令执行是单线程的,因此对大量键进行操作时可能会阻塞服务器。以下是几种常见的方法:

shell

KEYS memberCardData:*

使用 KEYS 命令(不推荐用于生产环境)
然后你可以使用 DEL 命令删除这些键。但是,KEYS 命令会遍历整个键空间,这在大数据集上是非常慢且消耗资源的操作,可能会导致 Redis 服务短时间不可用,因此不建议在生产环境中使用。

使用 SCAN 命令
SCAN 是一个增量迭代器,它提供了非阻塞地迭代数据库键的能力。你可以结合 SCAN 和 DEL 来安全地删除匹配的键。这里是一个简单的例子,展示如何使用 SCAN 来查找并删除键:

SCAN 0 MATCH memberCardData:* COUNT 100

这个命令将返回最多 100 个匹配的键,你可以接着用 DEL 命令删除它们。为了确保所有匹配的键都被删除,你需要在一个循环中不断调用 SCAN,直到游标返回 0。

bash 的运行命令如下:

redis-cli -h <host> -p <port> -a <password> --scan --pattern 'memberCardData:*' | xargs redis-cli -h <host> -p <port> -a <password> del

lua

local keys = redis.call('KEYS', 'memberCardData:*')
if next(keys) ~= nil thenredis.call('DEL', unpack(keys))
end
return #keys

你可以通过 EVAL 或 EVALSHA 命令来执行这个 Lua 脚本。不过,与 KEYS 命令一样,如果数据量很大,执行这样的 Lua 脚本也可能会造成阻塞。

以下是服务器运行需要

redis-cli -h <host> -p <port> -a <password> EVAL "local keys = redis.call('KEYS', 'memberCardData:*') if next(keys) ~= nil then redis.call('DEL', unpack(keys)) end return #keys" 0

EVAL

EVAL 是 Redis 提供的一个命令,用于执行 Lua 脚本。它允许你在 Redis 服务器上直接运行 Lua 代码,这在需要复杂逻辑或批量操作时非常有用。Lua 脚本在 Redis 内部是原子性执行的,也就是说,在脚本执行期间不会被其他客户端的请求打断。

EVAL script numkeys [key [key ...]] [arg [arg ...]]

script: 要执行的 Lua 脚本(作为一个字符串传递)。
numkeys: 脚本中涉及的键的数量。这些键会被传入到 Lua 脚本中的 KEYS 数组中。
[key [key …]]: 涉及的键列表,按照它们在 numkeys 中指定的顺序排列。
[arg [arg …]]: 传递给 Lua 脚本的额外参数,这些参数会被传入到 Lua 脚本中的 ARGV 数组中。

http://www.lryc.cn/news/504158.html

相关文章:

  • Grafana配置告警规则推送企微机器人服务器资源告警
  • 数字货币金融研究,深度学习虚拟币价格预测 数据集 市值top20 (2014年—2024年)
  • druid.properties图标是齿轮
  • 【图像处理】利用numpy、opencv、python实现车牌检测
  • ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor‘
  • Android无障碍服务监听实现自动点击按钮
  • Deveco Studio首次编译项目初始化失败
  • Redis缓存应用场景【Redis场景上篇】
  • 线程与进程基础
  • electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题
  • OpenCV的简单练习
  • JAVA:建造者模式(Builder Pattern)的技术指南
  • 12.11函数 结构体 多文件编译
  • Debezium系列之:使用Debezium采集oceanbase数据库
  • VMware虚拟机 Ubuntu没有共享文件夹的问题
  • spring使用rabbitmq当rabbitmq集群节点挂掉 spring rabbitmq怎么保证高可用
  • 简单vue3前端打包部署到服务器,动态配置http请求头后端ip方法教程
  • C语言关于溢出和不溢出的判断
  • 活动预告 |【Part1】Microsoft Azure 在线技术公开课:使用 Microsoft Fabric 实现数据湖仓
  • Unreal的Audio::IAudioCaptureStream在Android中录制数据异常
  • 6、AI测试辅助-测试报告编写(生成Bug分析柱状图)
  • 【第五节】docker应用系列篇: 使用Docker容器实现ElasticSearch+Kibana部署
  • openwrt 通过DHCP/DNS(Dnsmasq)屏蔽指定域名(hosts)
  • opencv——识别图片颜色并绘制轮廓
  • docker简单私有仓库的创建
  • etcd常见运维事件
  • [代码随想录17]二叉树之最大二叉树、合并二叉树、二搜索树中的搜索、验证二叉搜索树。
  • 前端三大框架 Vue、React 和 Angular 的市场占比分析
  • 12.3【JAVA-EXP4-DEBUGSTUDY】
  • flutter命令行直接指定设备