Redis如何批量删除指定前缀的key
批量删除指定前缀的Key有两中方法,一种是借助 redis-cli,另一种是通过 SCAN 命令来遍历所有匹配前缀的 key,并使用 DEL 命令逐个删除它们。
redis-cli
使用 Redis 自带的 redis-cli 命令行工具,你可以通过以下方式批量删除指定前缀的 key:
redis-cli KEYS "your_prefix*" | xargs redis-cli DEL
其中,your_prefix 是你要删除的 key 的前缀。
这个命令的作用是:
- 使用
KEYS命令获取所有匹配前缀的 key 列表。 - 使用
xargs命令将获取的 key 列表作为参数传递给后面的DEL命令,从而逐个删除这些 key。
需要注意的是,使用 KEYS 命令获取所有匹配前缀的 key 列表可能会在有大量 key 的情况下影响性能,因为它会阻塞 Redis 服务器的其他操作。在生产环境中,如果可能的话,最好使用迭代方式删除 key,例如使用 Lua 脚本或者编写程序来执行删除操作,以避免性能问题。
编码方式
在 Redis 中,除了上面的方法,要批量删除指定前缀的 key,你还可以使用 SCAN 命令来遍历所有匹配前缀的 key,并使用 DEL 命令逐个删除它们。但是,需要注意的是,SCAN 命令是一个游标迭代命令,它可以帮助你逐步遍历大量的 key,从而避免一次性获取所有 key 导致的性能问题。
以下是在 Redis 中批量删除指定前缀的 key 的示例代码,使用了 Go 的 github.com/go-redis/redis 包:
package main
import (
"context"
"fmt"
"log"
"strings"
"github.com/go-redis/redis/v8"
)
func main() {
ctx := context.Background()
// 创建 Redis 客户端
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // 你的 Redis 地址
DB: 0, // 使用的数据库编号
})
// 指定要删除的 key 的前缀
prefix := "your_prefix"
// 使用 SCAN 命令遍历匹配前缀的 key
iter := client.Scan(ctx, 0, prefix+"*", 0).Iterator()
for iter.Next(ctx) {
key := iter.Val()
// 使用 DEL 命令删除 key
if err := client.Del(ctx, key).Err(); err != nil {
log.Printf("Failed to delete key %s: %v", key, err)
} else {
fmt.Printf("Deleted key: %s\n", key)
}
}
if err := iter.Err(); err != nil {
log.Fatal(err)
}
}
在上述代码中,就是先使用 SCAN 命令遍历所有匹配前缀的 key,然后逐个使用 DEL 命令删除它们。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
Redis如何批量删除指定前缀的key的更多相关文章
- mysql批量删除指定前缀或后缀表
今天突然发现我们数据库中多出很多表,后缀名为"copy",预计是navicat直接拷贝导致的,然后要对这些有同样后缀名的表进行删除,假设一个一个选择会非常麻烦,表计较多,在网上找了 ...
- laravel redis 删除指定前缀的 key
// 前缀 $prefix = 'abc'; // 需要在前面连接上应用的缓存前缀 $keys = app('redis')->keys(config('cache.prefix') . $pr ...
- MySQL批量删除指定前缀表
Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_name LIKE ...
- MySQL中批量删除指定前缀表的sql语句
有时候我们在安装一些cms的时候,这些cms都是带表前缀的方便区分数据,但有时候我们测试完需要删除的时候又有别的前缀表就可以参考下面的方法 代码如下:Select CONCAT( 'drop tabl ...
- Redis删除相同前缀的key
如何优雅地删除Redis set集合中前缀相同的key? Redis中有删除单条数据的命令DEL,却没有批量删除特定前缀key的指令,但我们经常遇到需要根据前缀来删除的业务场景 ...
- redis删除指定前缀的缓存
redis作为缓存服务器为MySQL数据库提供较高的防御性,对于一些数据的查询可以直接从缓存中可以进行查询. 但是,某些情况下,我们需要清除缓存. 以下场景: 公司经常做活动,每个活动都存在大量的数据 ...
- redis key全量导出与导出指定前缀的key
redis命令列表中有两种方法可以全量导出所有的key: (1)keys 由于redis是单线程的,使用keys会导致redis服务阻塞,不建议线上服务采用这种方式. (2)scan 命令,下面是使用 ...
- 动态SQL实现批量删除指定数据库的全部进程
动态SQL实现批量删除指定数据库的全部进程 DECLARE @DatabaseName nvarchar(100) SET @DatabaseName = N'Account_006_Kaikei_2 ...
- Python批量删除指定目录下的指定类型的文件
Python作为一种脚本语言.其很适合文件级的各种操作.以下的代码能够批量删除指定目录下的所有特定类型(CSV类型)的文件. import sys, csv , operator import os ...
- Redis如何找出并快速删除亿级指定前缀的key
背景 由于Redis的单线程服务模式,命令keys *会阻塞正常的业务请求,不建议使用keys * pattern的方法进行查询,可能会使服务器卡顿而出现事故.如何获取指定的 key? 可以采用Red ...
随机推荐
- 漏洞评分高达9.8分!Text4Shell 会是下一个 Log4Shell吗?
在过去的几天里,Apache Commons Text 库中一个名为 Text4Shell 的新漏洞引起很大的轰动,该漏洞存在于 Apache Commons Text 1.5到1.9版本中.此警报于 ...
- 引用 AspNetCoreRateLimit => StatusCode cannot be set because the response has already started.
app.UseIpRateLimiting(); #需要放在前面,否则抓去不准,还有可能会出现下列错误 本次出现这个错误,是因为 .Net Core 跨域 里面的这行:httpContext.Res ...
- 本地安装mysql (zip)
下载 https://downloads.mysql.com/archives/community/ 解压到文件夹且添加系统环境变量 C:\Dinstall\Dmysql\mysql-8.2.0-wi ...
- PS 独立集中标识下修改项目采购类型增强
1.当物料独立集中标识为2,采购类型通过BAPI:BAPI_NETWORK_COMP_ADD,type_of_pur_resv传入'7',则报错"组件分配并不是未销售订单或项目库存而设的&q ...
- 【算法学习笔记】区间DP
基本的知识点引用自 OI wiki,感谢社区的帮助 什么是区间 DP? 区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系.令 ...
- Spark 数据倾斜及其解决方案
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/lqMu6lfk-Ny1ZHYruEeBdA 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双 ...
- PVE API创建虚拟机
度娘,谷歌都搜了一圈没有找到通过PVE API创建虚拟机的方式, 于是查官网自己试了试,部分代码抄的Sam Liu大佬的作业,感谢大佬. python代码如下: import requests # s ...
- 面试通过,拿到offer了,不去了会怎么样?
接受了offer但不去,其实没啥事,但这属于诚信问题. 这里有个概念,给了offer但不接受,这没事. 给了offer,也接受了,但在入职前一周(或在其它约定的时间范围内)说不去,同时姿态放低些打招呼 ...
- nextTick用法
- 最简单的http文件服务器
概述 需求来了,部署一个简单方便的文件服务器,可以查看.下载文件,不需要鉴权,越简单越好. 环境 centos:CentOS release 7.0 (Final)或以上版本 httpd:2.4.6 ...