redis scan命令_redis 查询命令

redis scan命令_redis 查询命令我们可能会遇到需要运行的某些命令在godis中不存在的情况,这个时候我们可以使用其原生的方式运行命令,为了方便使用,封装了一个方法,用于简化这个过程。需要注意的是,执行命令的返回结果返回的是interface{},需要对其进行解析成可读的实体结构。传递的参数logger是用来打印日志的://RunRedisCmd运行redis命令funcRunRedisCmd(redis*godis.Redis,logger*log.Logger,cmdstring,args…string)

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

我们可能会遇到需要运行的某些命令在godis中不存在的情况,这个时候我们可以使用其原生的方式运行命令,为了方便使用,封装了一个方法,用于简化这个过程。需要注意的是,执行命令的返回结果返回的是interface{},需要对其进行解析成可读的实体结构。

传递的参数logger是用来打印日志的:

// RunRedisCmd 运行redis命令
func RunRedisCmd(redis *godis.Redis, logger *log.Logger, cmd string, args ...string) (interface{ 
   }, error) { 
   
	byteArr := make([][]byte, len(args))
	cmdStr := cmd
	for i, str := range args { 
   
		byteArr[i] = []byte(str)
		cmdStr += fmt.Sprint(" ", str)
	}
	if logger != nil { 
   
		logger.Println(cmdStr)
	}
	err := redis.SendByStr(cmd, byteArr...)
	if err != nil { 
   
		if logger != nil { 
   
			logger.Println(err)
		}
		return nil, err
	}
	// 一定要receive
	r, err := redis.Receive()
	if err != nil { 
   
		if logger != nil { 
   
			logger.Println(err)
		}
		return r, err
	}
	if logger != nil { 
   
		if r != nil { 
   
			switch r.(type) { 
   
			case []byte:
				logger.Println(string(r.([]byte)))
			case int64:
				logger.Println(r.(int64))
			case []interface{ 
   }:
				logger.Println("\n", SprintArrAsRedis(0, r.([]interface{ 
   })))
			default:
				logger.Println(r)
			}
		} else { 
   
			logger.Println(r)
		}
	}
	return r, nil
}

// SprintArrAsRedis 打印redis返回的数组格式的数据,以redis的方式
//
// 127.0.0.1:16379> xrange testStream - +
//
// 1) 1) "1650986325904-0"
// 2) 1) "msg"
// 2) "hello"
func SprintArrAsRedis(spaceSize int, result []interface{ 
   }) string { 
   
	str := ""
	for i, data := range result { 
   
		if i != 0 { 
   
			for j := 0; j < spaceSize; j++ { 
   
				str += " "
			}
		}
		str += fmt.Sprintf("%d) ", i+1)
		markArr := false
		switch data.(type) { 
   
		case []byte:
			str += string(data.([]byte))
		case []interface{ 
   }:
			str += SprintArrAsRedis(spaceSize+3, data.([]interface{ 
   }))
			markArr = true
		default:
			str += fmt.Sprint(data)
		}
		if !markArr { 
   
			str += "\n"
		}
	}

	return str
}


单元测试:

package test

import (
	"github.com/piaohao/godis"
	"log"
	"momo/utils"
	"os"
	"testing"
	"time"
)

func Test_RunRedisCmd(t *testing.T) { 
   
	option := &godis.Option{ 
   
		Host:              "localhost",
		Port:              16379,
		Db:                0,
		ConnectionTimeout: 10 * time.Second,
		SoTimeout:         10 * time.Second,
	}
	pool := godis.NewPool(&godis.PoolConfig{ 
   }, option)
	redis, _ := pool.GetResource()

	logger := log.New(os.Stdout, "redis log ", log.Ldate|log.Lmicroseconds|log.Lshortfile)

	rsl, err := utils.RunRedisCmd(redis, logger, "set", "userage", "1")
	if err != nil || rsl == nil || string(rsl.([]byte)) != "OK" { 
   
		t.Error("fail set", err)
	}

	rsl, err = utils.RunRedisCmd(redis, logger, "incr", "userage")
	if err != nil || rsl == nil || rsl.(int64) != 2 { 
   
		t.Error("fail incr", err)
	}

	rsl, err = utils.RunRedisCmd(redis, logger, "del", "userage")
	if err != nil || rsl == nil || rsl.(int64) != 1 { 
   
		t.Error("fail del", err)
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184474.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python之sqlite3

    描述Python的数据库模块有统一的接口标准,所以数据库操作都有统一的模式(假设数据库模块名为db):1.用db.connect创建数据库连接,假设连接对象为conn2.如果该数据库操作不需

    2021年12月18日
    39
  • 华为測试 公共子串计算

    华为測试 公共子串计算

    2022年2月7日
    57
  • kubernetes k8s删除namespaces 时一直处在Terminating的问题解决

    kubernetes k8s删除namespaces 时一直处在Terminating的问题解决

    2021年5月13日
    147
  • π弧度转化成角度为_角度化成弧度公式

    π弧度转化成角度为_角度化成弧度公式这两天在看同事写的四叉树代码,其中用到了孤度和角度之间的转换,所以转载此文章进行了学习弧度与角度的关系一、角的两种单位“弧度”和“度”是度量角大小的两种不同的单位。就像“米”和“市尺”是度量长度大小

    2022年8月3日
    9
  • python的进制转换器,Python进制转换[通俗易懂]

    python的进制转换器,Python进制转换[通俗易懂]进制转换:进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。位权是指,进位制中每一固定位置对应的单位值。简单转换理念:把二进制三位一组分开就是八进制,四位一组就是十六进制二进制与十进制:(1)二进制转十进制:“按权展开求和”(1011)2=1×2**3+0x2**2+1x…

    2022年5月19日
    39
  • linux ftp lcd 命令,Linux FTP命令使用实例「建议收藏」

    linux ftp lcd 命令,Linux FTP命令使用实例「建议收藏」之前我们说过linuxscp的命令,是用来两台Linux服务器之前传输数据的。那么我们如何在Linux服务器与没有SSH的虚拟主机传输数据呢,我们可以使用Linux的FTP命令来实现,下面是一些使用实例。ftpwww.centos.bz这个命令表示试图连接www.centos.bz的FTP服务器,如果成功连接上,就会要求输入FTP用户名和密码。ftp>help连接上FTP服务器后,键入…

    2022年9月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号