golang 根据keys获取的key列表批量删除

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 根据keys获取的key列表批量删除相关的知识,希望对你有一定的参考价值。

golang新手求教,golang中利用redigo 模糊查询key 获取key列表,然后删除这些key怎么写
keys获取返回是[]interface 结构怎么能转换成DEL想要的输入参数

package main

import (
"fmt"
"github.com/garyburd/redigo/redis"
)

func main()
conn, err := redis.Dial("tcp", "<a href="EUBtznjR1PHndnWnzrj03PW01P1fL" target="_blank" class="baidu-highlight">127.0.0.1</a>:6379")
if err != nil
panic(err)

defer conn.Close()
conn.Do("SET", "app1", "test1")
conn.Do("SET", "app2", "test2")
val, err := redis.Strings(conn.Do("KEYS", "app*"))
fmt.Println(val, err)
conn.Send("MULTI")
for i, _ := range val
conn.Send("DEL", val[i])

fmt.Println(conn.Do("EXEC"))

Go是Google开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言。
罗布·派克(Rob Pike),罗伯特·格瑞史莫(Robert Griesemer),及肯·汤普逊于2007年9月开始设计Go语言,稍后Ian Lance Taylor, Russ Cox加入项目中。
Go语言是基于Inferno操作系统所开发的。[4]Go语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后追加Windows系统下的实现。
参考技术A package main

import (
    "fmt"
    "github.com/garyburd/redigo/redis"
)

func main() 
    conn, err := redis.Dial("tcp", "127.0.0.1:6379")
    if err != nil 
        panic(err)
    
    defer conn.Close()
    conn.Do("SET", "app1", "test1")
    conn.Do("SET", "app2", "test2")
    val, err := redis.Strings(conn.Do("KEYS", "app*"))
    fmt.Println(val, err)
    conn.Send("MULTI")
    for i, _ := range val 
        conn.Send("DEL", val[i])
    
    fmt.Println(conn.Do("EXEC"))

追问

这样子是循环来删除了,我开始也是这么做的,但是要是keys获取的到list很大,循环删除就有点费劲,能不能有啥方法直接把keys获取的返回值,转换成del的输入参数,一次性删除.

参考技术B 具体如下:

package main

import (
"fmt"
"github.com/garyburd/redigo/redis"
)

func main()
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil
panic(err)

defer conn.Close()
conn.Do("SET", "app1", "test1")
conn.Do("SET", "app2", "test2")
val, err := redis.Strings(conn.Do("KEYS", "app*"))
fmt.Println(val, err)
conn.Send("MULTI")
for i, _ := range val
conn.Send("DEL", val[i])

fmt.Println(conn.Do("EXEC"))

redis 删除指定前缀的key

参考技术A 获取Redis所有Key的方法:

1. 终端

获取所有Key命令:redis-cli keys ‘*’  ;

获取指定前缀的key:redis-cli KEYS “edu:*”

如果需要导出,可以redis-cli keys ‘*’ > /data/redis_key.txt

删除指定前缀的Key    redis-cli KEYS “edu:*” | xargs redis-cli DEL

2. PHP获取Redis所有Key

获取Redis所有Key:$keys = $redis->keys(‘*’);

获取指定前缀的Key:$keys = $redis->keys(‘edu*’);

删除指定前缀的Key :$redis->delete($redis->keys(‘image*’));

相关命令参考

Redis  KEYS http://doc.redisfans.com/key/keys.html

以上是关于golang 根据keys获取的key列表批量删除的主要内容,如果未能解决你的问题,请参考以下文章

对于redis的批量删除指定key,有没有好的方法

redis 删除指定前缀的key

redis或者缓存系统有批量删除的机制吗

Redis:按照正则批量删除key

如何删除SSH key-Mac 软件使用与分享

Python 为啥list不能作为字典的key