前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis scan命令_redis 查询命令

redis scan命令_redis 查询命令

作者头像
全栈程序员站长
发布2022-11-08 10:09:17
1.9K0
发布2022-11-08 10:09:17
举报
文章被收录于专栏:全栈程序员必看

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

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

代码语言:javascript
复制
// 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
}

单元测试:

代码语言:javascript
复制
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.cn/184474.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月8日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档