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)
	}
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Docker(一):Docker的安装与常用命令

    Docker(一):Docker的安装与常用命令

  • Python字符串中删除特定字符的方法

    Python字符串中删除特定字符的方法这篇文章主要介绍了Python字符串中删除特定字符的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧分析在Python中,字符串是不可变的。所以无法直接删除字符串之间的特定字符。所以想对字符串中字符进行操作的时候,需要将字符串转变为列表,列表是可变的,这样就可以实现对字符串中特定字符的操作。1、删除特定字符特定字符…

  • Kafka如何删除topic中的部分数据_kafka修改topic副本数

    Kafka如何删除topic中的部分数据_kafka修改topic副本数概述  在平时对kafka…

    2022年10月16日
  • matlab h5文件_matlab读取二进制文件

    matlab h5文件_matlab读取二进制文件1、把两个h5文件合并为一个。h5Splicing(h5NameSou,‘/’,h5NameDst,cellNum,1);functionh5Splicing(singleCellFileName,currentGroupName,multiCellsFileName,currentCellName,upDown)info=h5info(singleCellFil…

  • CSS样式表定义

    CSS样式表定义一个JSP页面是通过在HTML标签的基础上嵌入JSP动作和指令、CSS、Java变量和方法(Java代码段)、其他脚本元素(如JavaScript)等组成的。

  • 京东签到在哪儿_python爬虫教程

    京东签到在哪儿_python爬虫教程京东签到在哪里?有哪些步骤呢?最近很多朋友都在咨询小编京东签到在哪里,其实这个问题很简单,但是为了能够使更多的亲们了解京东签到在哪里,小编专门整理了这篇文章,希望阅读过后的亲们可以明确京东签到这个问题的答案。京东签到是为了给京东会员提供购物赠京豆、生日礼包、自营免运费、专享礼包等权益。提高京东商城会员之间的互动,增加用户粘性。一、京东签到在哪里,可以签到的入口1、京东金融APP打开后,右上角那个日…

发表回复

您的电子邮箱地址不会被公开。

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