首页 > 数据库 >Redis如何批量删除指定前缀的key

Redis如何批量删除指定前缀的key

时间:2023-08-25 14:12:21浏览次数:40  
标签:前缀 删除 Redis 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 的前缀。

这个命令的作用是:

  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,redis,命令,key
From: https://www.cnblogs.com/lianshuiwuyi/p/17656763.html

相关文章

  • springboot整合redis回滚
    1:添加依赖2:yml中配置连接,如:host,password,port3:@autowired注解注入Redistemplate调用方法生成对象 为了方便公司开发,一般会对数据进行序列化存储,这时需要创建配置类进行全局设置packagecom.example.config;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importco......
  • map.keySet()获取map全部的key值
    用for(Stringkey:params.keySet())读取mapKeySet():将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。keySet():迭代后只能通过get()取keypublicstaticStringgetUrlWithQueryString(Stringurl,......
  • el-tree 折叠节点时去掉 defaultExpandedKeys 中已折叠的节点及其子节点
    问题场景树形节点默认是全部折叠的。展开节点A,再把它折叠。然后给节点B新增子节点,新增成功后刷新树,却发现节点A是展开的。原因分析树刷新后全部节点都默认是折叠的,除非defaultExpandedKeys数组中有数据(这些节点数据是展开的)。因此,只需要在折叠节点A时,在defaultExpandedKeys......
  • redis实现用于限制非法登录
    redis实现用于限制非法登录次数为5次,锁定10分钟,并设置登录连接超时时间为10分钟要使用Redis实现限制非法登录次数、锁定和设置登录连接超时时间,可以结合Redis的计数器(counter)、设置过期时间(expire)和获取剩余有效时间(ttl)的功能。下面是一个示例的Java代码,使用Redis来实现这......
  • Redis:redis启停
    学习自:《Redis开发与运维》PDF47页1、常规用法开启:redis-server redis.conf&完整版:/安装目录/bin/redis-server/安装目录/bin/redis.conf&/usr/local/redis/bin/redis-server/usr/local/redis/redis.conf&关闭:/安装目录/bin/redis-clishutdown  2、启......
  • Docker 安装Redis 无法使用配置文件设置密码问题
    背景最近开发需要使用各种组件,如果都到开发机上安装,会占用电脑资源较多。所以使用docker容器来安装这些组件。例如redis、mongodb、mysql、rabitmq、elasticsearch等等。遇到的问题用edis官方镜像启动容器后,发现没有加载配置文件。解决方案1.redis镜像拉下来......
  • CentOS7.9搭建开发环境(Java、MySQL、Nginx、Redis)
    系统使用的阿里云CentOS7.964位SCC版。先安装个文件上传下载工具lrzsz,xshell登录终端,运行下面的命令:yuminstall-ylszrz 这是因为yum源的问题,需要修改yum配置。执行以下命令:cd/etc/yum.repos.dmvCentOS-Base.repoCentOS-Base.repo.backupwgethttp://mirrors.......
  • Docker下搭建Redis集群
    一、Redis集群方案的简单介绍Redis集群的方案一般分为三种:哈希取余分区一致性哈希算法分区哈希槽分区(本文介绍的就是这种) 1、哈希取余分区:优点:简单粗暴,只要提前预估好数据量,然后规划好节点,例如:3台、30台、300台节点,就能保证未来一段时间内的数据支撑。 缺点:事先规......
  • 如何使用缓存 | 热点Key处理
    热点Key当热点key缓存失效后,会有大量线程进行缓存重建。有的热点key不能再短时间内完成,可能需要复杂的计算,多次IO等。在缓存失效的瞬间,有大量线程来重建缓存,也就是会直接访问到后端,这会造成后端负载加大,严重的甚至可能导致应用崩溃,也就是-缓存击穿。解决方案1.分布式锁加......
  • adocker yml如何操作才能让搭建的redis集群能通过外网访问ip+端口的集群所有信息
    要在Docker中操作以便通过外部网络访问Redis集群的IP和端口,您需要执行以下操作:首先,您需要创建一个DockerComposeYAML文件(docker-compose.yml),用于定义Redis集群的配置。在此文件中,您可以指定每个Redis节点的配置和网络设置。以下是一个示例配置:version:'3'services:redis1:......