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.mzph.cn/news/581209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TiDB 7.1 多租户在中泰证券中的应用

本文详细介绍了中泰证券在系统国产化改造项目中采用 TiDB 多租户技术的实施过程。文章分析了中泰证券数据库系统现状以及引入 TiDB 资源管控技术的必要性,探讨了 TiDB 多租户的关键特性,并阐述了在实际应用中的具体操作步骤。通过该技术的应用&#xff0…

cfa一级考生复习经验分享系列(十七)

考场经验: 1.本人在Prometric广州考试中心,提前一天在附近住下,地方比较好找,到了百汇广场北门,进去就可以看见电梯直达10楼。进去之后需要现场检查行程卡和健康码,然后会问最近你有没有发烧咳嗽等问题&…

编程笔记 html5cssjs 009 HTML链接

编程笔记 html5&css&js 009 HTML链接 一、HTML 链接二、文本链接三、图片链接四、HTML 链接- id 属性五、锚点链接六、HTML 链接 - target 属性小结 网页有了链接,就可根据需要进行跳转。纸质读物只能根据指示的页码翻页,而网页则可以通过链接直…

JMeter逻辑控制器之ForEach控制器

1. 背景 前段时间在对某项目进行测试,存在一个需要遍历所有组织机构后给每个组织下新增部门的场景,其实也可以通过在数据库中直接添加数据这种方式来实现,但是有点风险,可能会生成脏数据,后期也不好排查,最…

linux系统 CentOS Tomcat 部署论坛

jdk安装命令:yum -y install java-1.8.0-openjdk-devel.x86_64 结尾上显示下图为成功 检查jdk环境是否配置成功命令:java -version或javac 显示版本 显示信息 mysql安装: 检查是否存mariadb数据库:rpm -qa | grep mariad 卸载ma…

企业计算机服务器中了360后缀勒索病毒如何处理,勒索病毒应对步骤

网络技术的应用与发展,为企业的生产运营提供了有力保障,但也为网络安全威胁埋下隐患。近期,网络上的勒索病毒非常嚣张,严重影响了企业的生产运营。近日,云天数据恢复中心接到很多企业的求助,企业的计算机服…

嵌入式单片机的存储区域与堆和栈

一、单片机存储区域 如图所示位STM32F103ZET6的参数: 单片机的ROM(内部FLASH):512KB,用来存放程序代码的空间。 单片机的RAM:64KB,一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …

HBase 例行灾备方案:快照备份与还原演练

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

秋招复习篇之代码规范

目录 前言 1、变量命名 2、代码空格 1)操作符左右一定有空格, 2)分隔符(, 和;)前一位没有空格,后一位保持空格,例如: 3)大括号和函数保持同一行,并有一个空格…

Python 网络编程之搭建简易服务器和客户端

用Python搭建简易的CS架构并通信 文章目录 用Python搭建简易的CS架构并通信前言一、基本结构二、代码编写1.服务器端2.客户端 三、效果展示总结 前言 本文主要是用Python写一个CS架构的东西,包括服务器和客户端。程序运行后在客户端输入消息,服务器端会…

虹科方案丨L2进阶L3,数据采集如何助力自动驾驶

来源:康谋自动驾驶 虹科方案丨L2进阶L3,数据采集如何助力自动驾驶 原文链接:https://mp.weixin.qq.com/s/qhWy11x_-b5VmBt86r4OdQ 欢迎关注虹科,为您提供最新资讯! 12月14日,宝马集团宣布,搭载…

Java在SpringCloud中自定义Gateway负载均衡策略

Java在SpringCloud中自定义Gateway负载均衡策略 一、前言 spring-cloud-starter-netflix-ribbon已经不再更新了,最新版本是2.2.10.RELEASE,最后更新时间是2021年11月18日,详细信息可以看maven官方仓库:org.springframework.clou…

获取Android和iOS崩溃日志的方法

文章目录 一、Android崩溃日志1、获取方法1.1 通过adb logcat获取1.2 通过adb shell dumpsys dropbox命令获取 2、导出设备Crash日志3、导出设备ANR日志4、常见日志类别 二、iOS崩溃日志1、获取方法1.1 xcode中打开1.2 手机上直接获取 2、Crash 头部信息 一、Android崩溃日志 …

js中深拷贝与浅拷贝的区别?如何实现一个深拷贝?(收藏好,用时好找)

文章目录 一、数据类型存储二、浅拷贝Object.assignslice()concat()拓展运算符 三、深拷贝_.cloneDeep()jQuery.extend()JSON.stringify()循环递归 四、区别小结 一、数据类型存储 前面文章我们讲到,JavaScript中存在两大数据类型: 基本类型引用类型 …

为什么微信小程序不用div而是用自创的view标签?

在官方的《小程序开发指南》中,明确说明了为什么要自定义标签以及这么设计的原因和带来的好处,说明如下: 6.1.2 管控与安全 基于Web 技术来渲染小程序是存在一些不可控因素和安全风险的。这是因为Web技术是非常开放灵活的,我们可以…

多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测

多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测 目录 多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预…

[C/C++]排序算法 快速排序 (递归与非递归)

目录 🚩概念: 🚩实现: ⚡1.hoare ⚡2.挖坑法 ⚡3.双指针法 🚩快速排序递归实现 🚩快速排序非递归实现 🚩概念: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有…

C# Lock 解读

C# Lock 解读 一、Lock定义二、简单例子三、简单解释一下执行过程四、Lock的对象选择问题1、为什么不能lock值类型2、Lock字符串3、MSDN推荐的Lock对象4、lock(typeof(Class)) 五、特殊问题:Lock(this)等的详细解释总结 一、Lock定义 lock 关…

Vue.set 方法原理

function set(target, key, value) {// 判断是否是数组,并且 key 是一个有效的索引值if (Array.isArray(target) && isValidArrayIndex(key)) {target.length Math.max(target.length, key)target.splice(key, 1, value)return value}// 判断 key 是否已经…

JS常见正则表达式写法(附案例)

正则表达式方法示例: 1. test方法解析,test判断正则是否在字符串中出现过,如果出现返回true,如果没出现返回false。 let str hello world; let ret1 /e/.test(str); // true let ret2 /q/.test(str); // false 如&…