批量删除指定前缀的Key有两中方法,一种是借助 redis-cli,另一种是通过 SCAN 命令来遍历所有匹配前缀的 key,并使用 DEL 命令逐个删除它们。

redis-cli

使用 Redis 自带的 redis-cli 命令行工具,你可以通过以下方式批量删除指定前缀的 key:

redis-cli KEYS "your_prefix*" | xargs redis-cli DEL

其中,your_prefix 是你要删除的 key 的前缀。

这个命令的作用是:

  1. 使用 KEYS 命令获取所有匹配前缀的 key 列表。
  2. 使用 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的更多相关文章

  1. mysql批量删除指定前缀或后缀表

    今天突然发现我们数据库中多出很多表,后缀名为"copy",预计是navicat直接拷贝导致的,然后要对这些有同样后缀名的表进行删除,假设一个一个选择会非常麻烦,表计较多,在网上找了 ...

  2. laravel redis 删除指定前缀的 key

    // 前缀 $prefix = 'abc'; // 需要在前面连接上应用的缓存前缀 $keys = app('redis')->keys(config('cache.prefix') . $pr ...

  3. MySQL批量删除指定前缀表

    Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_name LIKE ...

  4. MySQL中批量删除指定前缀表的sql语句

    有时候我们在安装一些cms的时候,这些cms都是带表前缀的方便区分数据,但有时候我们测试完需要删除的时候又有别的前缀表就可以参考下面的方法 代码如下:Select CONCAT( 'drop tabl ...

  5. Redis删除相同前缀的key

          如何优雅地删除Redis set集合中前缀相同的key?       Redis中有删除单条数据的命令DEL,却没有批量删除特定前缀key的指令,但我们经常遇到需要根据前缀来删除的业务场景 ...

  6. redis删除指定前缀的缓存

    redis作为缓存服务器为MySQL数据库提供较高的防御性,对于一些数据的查询可以直接从缓存中可以进行查询. 但是,某些情况下,我们需要清除缓存. 以下场景: 公司经常做活动,每个活动都存在大量的数据 ...

  7. redis key全量导出与导出指定前缀的key

    redis命令列表中有两种方法可以全量导出所有的key: (1)keys 由于redis是单线程的,使用keys会导致redis服务阻塞,不建议线上服务采用这种方式. (2)scan 命令,下面是使用 ...

  8. 动态SQL实现批量删除指定数据库的全部进程

    动态SQL实现批量删除指定数据库的全部进程 DECLARE @DatabaseName nvarchar(100) SET @DatabaseName = N'Account_006_Kaikei_2 ...

  9. Python批量删除指定目录下的指定类型的文件

    Python作为一种脚本语言.其很适合文件级的各种操作.以下的代码能够批量删除指定目录下的所有特定类型(CSV类型)的文件. import sys, csv , operator import os ...

  10. Redis如何找出并快速删除亿级指定前缀的key

    背景 由于Redis的单线程服务模式,命令keys *会阻塞正常的业务请求,不建议使用keys * pattern的方法进行查询,可能会使服务器卡顿而出现事故.如何获取指定的 key? 可以采用Red ...

随机推荐

  1. 用 Java?就用国产轻量框架: Solon v1.10.2

    相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 - 10 倍. (更快) qps 高 2- 3 倍. (更高) 运行时内存节省 1/3 ~ 1/2. (更少) 打包 ...

  2. Spring Boot CMD 运行日志输出中文乱码

    Spring Boot 在Windows CMD 中运行,日志输出中文乱码name="CONSOLE" 设置成 charset utf-8 ,在windows cmd 中运行时,l ...

  3. C++岗位面试真题宝典 -- 操作系统篇

    2.1 Linux中查看进程运行状态的指令.查看内存使用情况的指令.tar解压文件的参数. 参考回答 查看进程运行状态的指令:ps命令."ps -aux | grep PID",用 ...

  4. [网络克隆]利用tiny proxy实现局域网内批量安装WINDOWS操作系统。

    说明:本文支持UEFI及BIOS系统克隆.支持UEFI及BIOS网络引导,适用于新旧几乎所有支持网络启动的电脑. 事前准备: 保证被克隆的电脑为同一配置,或者各硬件差异不大,比如CPU同如英特尔8代的 ...

  5. sql server主从同步

    sql server主从方案介绍   sql server 作为目前主流的数据库,用户遍布世界各地.sql server也有一些比较成熟的主备方案,目前主要有:复制模式(发布-订阅模式).镜像传输模式 ...

  6. ACP 知识点总结

    记录下学习ACP过程不断遇到的且需要记录的知识点: 在阿里云专有网络VPC创建之后,路由器也是随着VPC一起自动创建,所以不需要手动创建,这个时候需要继续创建交换机才能在交换机种创建其他云产品. 7层 ...

  7. P5733 【深基6.例1】自动修正

    1.题目介绍 2. 题解 2.1 字符串大小写转换 思路 str[i] -= 'a' -'A'; 注意这里转换方式,即减去偏移量(ASCII码表中,'a'在'A'前面,如果记不得偏移量,就直接写'a' ...

  8. CSS - 滤镜的妙用 - 制作炫彩圆环(外加动画)

    效果图如下: 话不多说,上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  9. MySQL复习——20211027

    MYSQL MySQL创建数据库 我们可以在登录MySQL服务后,使用create命令创建数据库,语法如下: CREATE DATABASE 数据库名; 使用root用户登录,root用户拥有最高权限 ...

  10. Go-基本类型-int-float-bool-byte-rune