golang中redis模糊删除

  • keys

当我们需要遍历redis所有key或者指定模式的key时,首先想到的是keys命令,例如:keys*,但是当redis中key数量越大,keys 命令执行越慢,而且最重要的会阻塞服务器,对单线程的redis来说,简直是灾难,所以生产环境建议不使用该命令

批量模糊删除key

    defer conn.Close()
	val, err := redis.Strings(conn.Do("KEYS", "*"+key+"*"))
	conn.Send("MULTI")
	for i, _ := range val {
		conn.Send("DEL", val[i])
	}
	_, err = redis.Values(conn.Do("EXEC"))
	if err != nil {
		log.Error("error(%v)", err)
	}
  • scan

从redis2.8版本开始,官方提供了一个新的命令scan来遍历key(参见

    defer con.Close()
	//用于循环查询KEY
	iter := 0
	var keys []string
	for {
		if arr, err := red.MultiBulk(con.Do("SCAN", iter,"MATCH","*"+key+"*")); err != nil 
            {
			panic(err)
		} else {
			iter, _ = red.Int(arr[0], nil)
			key,_:=red.Strings(arr[1], nil)
			for _, value := range key {
				keys=append(keys,value)
			}
		}
		if iter == 0  {
			break
		}
	}
	//开启事务
	con.Send("MULTI")
	for _, value := range keys {
		//删除
		con.Send("DEL", value)
	}
	_, err = redis.Values(con.Do("EXEC"))
	if err != nil {
		log.Error("error(%v)", err)
	}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值