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

redis中根据通配符删除key

redis中根据通配符删除key

  1. 我们是不是在redis中keys user:*可以获取所有key,但是 del user:*却不行
  2. 这里我提供的命令主要是SCAN
  3. SCAN 0 MATCH user:* COUNT 100
  4. 使用lua保证原子性
    在这里插入图片描述

SCAN参数描述

  • 在示例中,COUNT 被设置为 100。这是一个防止一次性获取大量数据而导致性能问题的一种策略。
  • 如果你的键数量可能很大,你可以根据实际情况适当调整 COUNT 的值。如果你希望一次性获取所有匹配的键,可以将 COUNT 设置为一个足够大的值,或者不指定 COUNT 参数,让 Redis 返回所有匹配的键。
  • COUNT 参数并不是用来限制返回结果的数量的,是控制每次迭代返回的元素数量
  • 请注意,使用较大的 COUNT 值可能会导致 SCAN 命令返回的响应时间增加,具体的选择需要根据你的实际场景和性能需求来调整。

SCAN返回参数

  • 第一个元素是一个整数,表示下一次调用 SCAN 命令时应该使用的新游标。如果游标为 0,则表示遍历完成。
  • 第二个元素是一个数组,包含了匹配模式的键。这个数组的长度可以小于等于 COUNT 参数指定的数量。

这是我的lua脚本

-- Lua脚本:根据通配符删除键
-- KEYS[1]: 匹配的键的通配符
local keyPattern = KEYS[1]local cursor = 0
local keys = {}repeatlocal result = redis.call("SCAN", cursor, "MATCH", keyPattern, "COUNT", 100)cursor = tonumber(result[1])local replyKeys = result[2]for _, key in ipairs(replyKeys) dotable.insert(keys, key)end
until cursor == 0-- 逐个删除键
for _, key in ipairs(keys) doredis.call("DEL", key)
end

使用golang实现


// 根据通配符删除
// 使用lua保证原子性
func DeleteRedisKeysByPattern(conn redis.Conn, key string) error {// 读取Lua脚本内容luaScript := `local cursor = 0local keys = {}repeatlocal result = redis.call("SCAN", cursor, "MATCH", ARGV[1], "COUNT", 100)cursor = tonumber(result[1])local replyKeys = result[2]for _, key in ipairs(replyKeys) dotable.insert(keys, key)enduntil cursor == 0-- 逐个删除键for _, key in ipairs(keys) doredis.call("DEL", key)end`// 将Lua脚本注册到Redis连接script := redis.NewScript(0, luaScript)// 执行Lua脚本_, err := script.Do(conn, key)if err != nil {fmt.Println("Lua脚本执行失败:", err)return err}return nil
}

在这里插入图片描述
在这里插入图片描述

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

相关文章:

  • 【HDFS联邦(2)】HDFS Router-based Federation官网解读:HDFSRouterFederation的架构、各组件基本原理
  • 【头歌实训】Spark 完全分布式的安装和部署
  • Leetcode—86.分隔链表【中等】
  • 淘宝/天猫商品API:实时数据获取与安全隐私保护的指南
  • 使用 SSH 方式实现 Git 远程连接GitHub
  • Centos7部署Keepalived+lvs服务
  • 12/31
  • python使用openpyxl为excel模版填充数据,生成多个Sheet页面
  • 基于ssm的4S店预约保养系统开发+vue论文
  • 【Git】Git的基本操作
  • 【超图】SuperMap iClient3D for WebGL/WebGPU —— 数据集合并缓存如何控制对象样式
  • intellij IDEA开发工具的使用(打开/关闭工程;删除类文件;修改类/包/模块/项目名称;导入/删除模块)
  • 抖音详情API:开发环境搭建与工具选择
  • IntelliJ IDEA [插件 MybatisX] mapper和xml间跳转
  • Havenask 分布式索引构建服务 --Build Service
  • vscode软件安装步骤
  • C语言中灵活多变的动态内存,malloc函数 free函数 calloc函数 realloc函数
  • 小细节处理
  • 【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总
  • Python正则的匹配与替换
  • 解决ELement-UI懒加载三级联动数据不回显(天坑)
  • 【数据结构和算法】找出两数组的不同
  • 基于Python的B站排行榜大数据分析与可视化系统
  • MySQL一些常用命令
  • WPF 新手指引弹窗
  • py注册登录界面
  • 基于电商场景的高并发RocketMQ实战-Consumer端队列负载均衡分配机制、并发消费以及消费进度提交
  • 【Java开发岗面试】八股文—数据库MySQLRedis
  • IntelliJ IDEA [设置] 隐藏 .idea 等 .XXX 文件夹
  • 每日一题——LeetCode961