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

2023-10-16 20:05:03 浏览数 (1)

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

redis-cli

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

代码语言:javascript复制
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 包:

代码语言:javascript复制
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: %sn", key)
        }
    }
    if err := iter.Err(); err != nil {
        log.Fatal(err)
    }
}

在上述代码中,就是先使用 SCAN 命令遍历所有匹配前缀的 key,然后逐个使用 DEL 命令删除它们。

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)[1]进行许可,使用时请注明出处。 Author: mengbin[2] blog: mengbin[3] Github: mengbin92[4] cnblogs: 恋水无意[5]

References

[1] 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh [2] mengbin: mengbin1992@outlook.com [3] mengbin: https://mengbin.top [4] mengbin92: https://mengbin92.github.io/ [5] 恋水无意: https://www.cnblogs.com/lianshuiwuyi/

0 人点赞