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 = {}

repeat
    local result = redis.call("SCAN", cursor, "MATCH", keyPattern, "COUNT", 100)
    cursor = tonumber(result[1])
    local replyKeys = result[2]
    for _, key in ipairs(replyKeys) do
        table.insert(keys, key)
    end
until cursor == 0

-- 逐个删除键
for _, key in ipairs(keys) do
    redis.call("DEL", key)
end

使用golang实现


// 根据通配符删除
// 使用lua保证原子性
func DeleteRedisKeysByPattern(conn redis.Conn, key string) error {
	// 读取Lua脚本内容
	luaScript := `
		local cursor = 0
		local keys = {}

		repeat
		    local result = redis.call("SCAN", cursor, "MATCH", ARGV[1], "COUNT", 100)
		    cursor = tonumber(result[1])
		    local replyKeys = result[2]
		    for _, key in ipairs(replyKeys) do
		        table.insert(keys, key)
		    end
		until cursor == 0

		-- 逐个删除键
		for _, key in ipairs(keys) do
		    redis.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
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/274276.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

仓储革新:AR技术引领物流进入智慧时代

根据《2022年中国物流行业研究:深度探析行业现状(智能设备及智能软件)》,报告中提及:“中国社会物流总额依然保持着较为良好的增长态势,年增速已恢复至常年平均水平。2021年社会物流总额细分中工业物流总额…

小机器人,电子锁,牙刷,表类开关,磁阀开关等一些安防直流驱动的选型介绍分析

安防监控是一门被人们日益重视的新兴行业,就目前发展来看,应用普及程度越来越广,科技含量也越来越高,几乎所有高新科技都可促进其发展,尤其是信息时代的来临,更为该行业的发展提供契机。其中安防领域最为典…

玩转MYSQL|详细分析mysql-MGR集群搭建

目录 1、简介 2、环境准备 2.1 数据库服务器规划 2.2 安装mysql5.7.20 2.3 设置hostname和ip映射 3、创建复制环境 3.1 服务器host68.cn 3.1.1 配置/etc/my.cnf 3.1.2 服务器host68.cn上建立复制账号: 3.1.3 在mysql服务器host68.cn上安装group replicatio…

OpenChat-3.5:70亿参数下的AI突破

引言 在对话AI的发展史上,OpenChat-3.5标志着一个新纪元的到来。拥有70亿参数的这一模型,不仅是对现有语言学习模型(LLMs)的重大改进,更是在多模态任务中树立了新的标准。 模型概述 OpenChat-3.5作为一款先进的多模…

修复Apache httpd中的SSL/TLS 协议信息泄露漏洞(CVE-2016-2183)

漏洞详情如下: 详细描述TLS是安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。 TLS, SSH, IPSec协商及其他产品中使用的IDEA、DES及Triple DES密码或者3DES及Triple 3DES存在大约四十亿块的生日界,这可使远程攻击者通过S…

【超图】SuperMap iClient3D for WebGL/WebGPU —— 数据集合并缓存如何控制对象样式

作者:taco 最近在支持的过程中,遇到了一个新问题!之前研究功能的时候竟然没有想到。通常我们控制单个对象的显隐、颜色、偏移的参数都是根据对象所在的图层以及对象单独的id来算的。那么问题来了,合并后的图层。他怎么控制单个对象…

微信小程序开发系列-04获取用户图像和昵称

这个功能的实现对于我这个新手来说可谓是一波三折。该功能的实现经历了三个“版本”的迭代,我的运气不是很好,从第一个“版本”开始尝试,这篇文章也是记录下这个过程,以便其他新手能快速找到解决方案。 Gen1-getUserInfo 第一个…

openmediavault(OMV) (19)云相册(3)mt-photos

简介 MT Photos是一款为Nas用户量身打造的照片管理系统。通过AI技术,自动将您的照片整理、分类,包括但不限于时间、地点、人物、照片类型。可以在任何支持Docker的系统中运行它。详情可查看mtmt.tech官网,mt-photos是付费订阅使用的,也可以一次性付费永久使用,具体使用mt…

【SpringCloud笔记】(12)分布式请求链路跟踪之Sleuth

Sleuth 背景 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的…

JMeter逻辑控制器之ForEach控制器

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

在 Unity 中获取 Object 对象的编辑器对象

有这个需求的原因是,在编辑器的 Inspector 逻辑中,写了许多生成逻辑。 现在不想挨个在 Inspector 上都点一遍按钮,所以就需要能获取到它们的编辑器对象。 发现可以借助官方的 UnityEditor.Editor.CreateEditor 方法达到目的,如下…

ZETA落地合肥、宜城南方水泥,纵行科技携手中才邦业助力水泥企业数智化管理

近日,合肥南方水泥、宜城南方水泥落地ZETA预测性维护方案,通过在水泥厂内搭建ZETA网络,并在B类及C类主辅机设备上安装ZETA系列端智能传感器,进行数据采集和监测设备运行状态、以及早期故障警报和诊断,实现水泥生产设备…

【Docker-Dev】Mac M2 搭建docker mysql

Mac M2 搭建Mysql 1、前言2、前置说明-Docker的代理访问3、前置说明-Mysql的镜像访问3.1、提取信息3.1.1、开启Mysql的实例3.1.2、Dokcer连接Mysql3.1.3、官方简易版的docker-compose3.1.4、如何登录mysql bash3.1.5、自定义my.cnf文件3.1.6、如何知道其他自定义配置项 4、M2安…

独立于 Github,更方便地管理自己的静态网站?来试试这套自托管 Git 仓库方案!

服务器结构简介 这套方案可以实现一个非常方便的编写博客的方法。你可以在自己电脑上写好文章,生成网站,并且直接git push即可部署到自己的服务器上,一气呵成,一般情况下完全不需要登陆远程服务器。 在讲述方案之前,我…

WEB 3D技术 three.js 基础网格材质演示几何体贴图 ao贴图效果

本文 我们来说一下 基础网格材质 之前我们也用到过这个材质 但是用的非常基础 我们在官网搜索 MeshBasicMaterial 这是能够给到物体最基础的材质 但也是性能最好的材质 后续我们还会学效果更好的物理材质 但还是那句话 效果复杂的东西对性能消耗自然会更多 我们拉下来 会发现…

【1】Docker详解与部署微服务实战

Docker 详解 Docker 简介 Docker 是一个开源的容器化平台,可以帮助开发者将应用程序和其依赖的环境打包成一个可移植、可部署的容器。Docker 的主要目标是通过容器化技术实现应用程序的快速部署、可移植性和可扩展性,从而简化应用程序的开发、测试和部…

uniapp 创建项目

uniapp 是一款基于 Vue 框架的跨平台应用开发框架。 创建 uniapp 项目 一、打开 HbuilderX 编辑器,点击新建项目。 二、选择 uniapp 项目、自定义项目名称、选择默认模板、选择 Vue 版本、点击创建。 三、这样 uniapp 项目就创建完毕啦! 运行 uniapp …

Little Snitch 5 for Mac(小飞贼系统安全防火墙软件) 支持M1

Little Snitch 5 for Mac是一款强大的防火墙软件,为Mac用户提供了全面的网络保护和隐私控制。该软件的核心功能是监控和管理应用程序对网络的访问权限。 Little Snitch 5可以实时监测应用程序的网络活动,并通过弹出窗口显示访问权限请求。用户可以根据需…

Spring Boot 入参校验及全局异常处理

版本依赖 JDK 17 Spring Boot 3.2.0 源码地址:Gitee Spring Boot validation spring-boot-starter-validation是基于hibernate-validator的实现,在Spring Boot项目中直接导入spring-boot-starter-validation即可。 Valid 和 Validated 的区别 适用范围…

Bert-vits2最终版Bert-vits2-2.3云端训练和推理(Colab免费GPU算力平台)

对于深度学习初学者来说,JupyterNoteBook的脚本运行形式显然更加友好,依托Python语言的跨平台特性,JupyterNoteBook既可以在本地线下环境运行,也可以在线上服务器上运行。GoogleColab作为免费GPU算力平台的执牛耳者,更…