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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据仓库ETL开发如何进行测试

    数据仓库ETL开发如何进行测试 数据仓库ETL开发如何进行测试?数据仓库ETL开发如何进行测试?由于数据仓库中数据量比较庞大,还有为了安全因素,一般在开发库和测试库数据不完全或者和生成库(正式库)不一致,导致在测试库和开发库中进行代码测试存在一定的问题。我们知道在软件开发过程中有很多测试的方法,按照测试方法可以分为白盒测试和黑盒测试。白盒测试也称结构测试或逻辑驱动测试,是指基于一个应用代码的内部逻辑

    2022年5月9日
    36
  • ipad2 ios9.3.5越狱_ipad3怎么越狱

    ipad2 ios9.3.5越狱_ipad3怎么越狱[ipad]3.2.2IPAD越狱教程!最新绿雨一、准备工作.sC&w)S&X1O5V引用;v/g2e;[8F%_;J2l4u-zC:`9F.}!L3b’q*}4a1E”}8H2h1:满电IPAD6P$]-b0Q1]/e2:双口USB供电转接线(有些电脑…

    2025年12月1日
    4
  • 海思Hi3798处理器参数,Hi3798芯片详细信息介绍

    海思Hi3798处理器参数,Hi3798芯片详细信息介绍Hi3798CV200集成4核64位高性能CortexA53处理器、内置NEON加速引擎,强大的CPU处理能力可以满足各种差异化的业务需求。在码流兼容性、在线视频播放的流畅性、图像质量以及整机性能方面保持业界最好的用户体验。支持4K2KP60@10bit超高清视频解码和显示,支持H.265/HEVC、H.264/AVC、AVS+、MVC、MPEG2、MPEG4、VC-1、VP6、VP…

    2022年6月30日
    112
  • 4g通信系统的网络结构_4g通信

    4g通信系统的网络结构_4g通信1、4G通信网络的关键技术研究4G通信网络,就必须加强对其关键技术的研究,这是决定4G网络通信与3G网络通信不同的关键因素,其主要包括正交频分复用技术、软件无线电技术、智能天线技术、多输入多输出技术、IP核心网技术和多用户检测技术等。1.1正交频分复用技术所谓的正交频分复用技术,简称OFDM技术,是4G通信网络的核心技术,主要是将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。OFDM技术不同于一般性的网络技术,它可以通过相关技术将信号分开,有

    2025年11月25日
    4
  • 普通用户免输密码切换root「建议收藏」

    普通用户免输密码切换root

    2022年2月22日
    66
  • idea 2021激活码[在线序列号][通俗易懂]

    idea 2021激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    119

发表回复

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

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