本文原文 :
Getting started with Golang Redis

安装

go-redis 支持最新的两个go版本并且仅支持在go moudle环境下工作。首先你要对你的包管理进行一个初始化

go mod init github.com/my/repo

之后就是进行安装(注意在导入路径中的V8字段

go get github.com/go-redis/redis/v8

连接redis Service

连接redis Service

import "github.com/go-redis/redis/v8"rdb := redis.NewClient(&redis.Options{Addr:    "localhost:6379",Password: "", // 密码设置DB:       0,  // redis的默认数据库选择
})

另一种受欢迎的方式是使用连接字符串:

opt, err := redis.ParseURL("redis://<user>:<pass>@localhost:6379/<db>")
if err != nil {panic(err)
}rdb := redis.NewClient(opt)

使用 TLS加密层

为了使用加密层,你需要去提供一个空的tls.Config结构。如果你在使用一个私有证书,你应当在tls.Config中指定它。

rdb := redis.NewClient(&redis.Options{TLSConfig: &tls.Config{MinVersion: tls.VersionTLS12,//Certificates: []tls.Certificate{cert}},
})

如果你收到x509: cannot validate certificate for xxx.xxx.xxx.xxx because it doesn't contain any IP SANs 尝试设置 ServerName选项:

rdb := redis.NewClient(&redis.Options{TLSConfig: &tls.Config{MinVersion: tls.VersionTLS12,ServerName: "your.domain.com",},
})

通过SSH连接

连接SSH通道:

sshConfig := &ssh.ClientConfig{User:             "root",Auth:          []ssh.AuthMethod{ssh.Password("password")},HostKeyCallback: ssh.InsecureIgnoreHostKey(),Timeout:      15 * time.Second,
}sshClient, err := ssh.Dial("tcp", "remoteIP:22", sshConfig)
if err != nil {panic(err)
}rdb := redis.NewClient(&redis.Options{Addr: net.JoinHostPort("127.0.0.1", "6379"),Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) {return sshClient.Dial(network, addr)},// Disable timeouts, because SSH does not support deadlines.ReadTimeout:  -1,WriteTimeout: -1,
})

错误处理:dial tcp: i/o timeout

go-redis不能连接到Redis服务器的时候,您会获得dial tcp: i/o timeout,举个例子,当服务器停机或者防火墙保护Redis端口时。要检查 Redis Server 是否正在侦听端口,请在运行 go-redis 客户端的主机上运行 telnet 命令:

telnet localhost 6379
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

如果您使用 Docker、Istio 或任何其他mesh/sidecar模式,请确保应用程序在容器启动后完全可用,例如,进行Docker的心跳检查和对 Istio进行 holdApplicationUntilProxyStarts操作。

Context(上下文)

所有的Redis命令都可以传入一个上下文信息用来携带某些信息或者设置超时Timeouts,举个例子,跟踪上下文tracing context:

ctx := context.Background()

执行命令:

去执行一个命令:

val, err := rdb.Get(ctx, "key").Result()
fmt.Println(val)

你可以保存这个命令并且在此之后分别访问值和错误信息:

get := rdb.Get(ctx, "key")
fmt.Println(get.Val(), get.Err())

Executing unsupported commands

执行一个不合法或者自定义命令:

val, err := rdb.Do(ctx, "get", "key").Result()
if err != nil {if err == redis.Nil {fmt.Println("key does not exists")return}panic(err)
}
fmt.Println(val.(string))

Do返回一个 Cmd它有足够的方法保证它可以工作在interface{}接口上:

// Text is a shortcut for get.Val().(string) with proper error handling.
//Text 是对get.val().(string)的一个捷径,同时也包含着恰当的错误信息
val, err := rdb.Do(ctx, "get", "key").Text()
fmt.Println(val, err)

完整的方法如下所示:

s, err := cmd.Text()
flag, err := cmd.Bool()num, err := cmd.Int()
num, err := cmd.Int64()
num, err := cmd.Uint64()
num, err := cmd.Float32()
num, err := cmd.Float64()ss, err := cmd.StringSlice()
ns, err := cmd.Int64Slice()
ns, err := cmd.Uint64Slice()
fs, err := cmd.Float32Slice()
fs, err := cmd.Float64Slice()
bs, err := cmd.BoolSlice()

redis.Nil

go-redis包中导入了一个redis.Nil的错误,当Redis服务器无论何时报告nil的时候便将 redis.Nil返回,你可以使用Redis-cli去检测Redis服务器的返回响应。

在以下的例子中,我们使用redis.Nil去区分空字符串响应和一个nil响应(键值不存在):

val, err := rdb.Get(ctx, "key").Result()
switch {case err == redis.Nil:fmt.Println("key does not exist")
case err != nil:fmt.Println("Get failed", err)
case val == "":fmt.Println("value is empty")
}

GET不是唯一一个返回nil响应的命令 ,举例讲,BLPOPZSCORE 同样可以返回redis.Nil

Conn对象

Conn对象代表了一个Redis连接而非一个连接池。优先使用Client对象运行连接除非对单个连续的Redis链接有特殊的需求。

goredis文档中文翻译---Getting started with Golang Redis相关推荐

  1. ReactiveX文档中文翻译

    ReactiveX/RxJava文档中文版 项目地址:https://github.com/mcxiaoke/RxDocs,欢迎Star和帮忙改进. 有任何意见或建议,到这里提出 Create New ...

  2. Pushy入门文档中文翻译

    本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/article/2016/12/01/Pushy入门文档中文翻译/ pushy 这是我自己的翻译版本,原文地 ...

  3. Word文档中文翻译成英文的方法

    将Word文档在线翻译,有的时候我们在一些文档中放一些重要的内容,将这些内容放在文档中,然后通过在浏览器上进行搜索进入到在线翻译中,下面就让小编给大家简单介绍一下. 步骤一:首先我们需要在浏览器上进行 ...

  4. axios 文档中文翻译

    axios中文文档(完全中文翻译) 由于使用网上一些翻译文档时发现,内容多被广告隔离成小块.用起来有点不方便同时夹杂部分英文.于是索性把 axios 自己翻译了一遍,贡献给大家便查. 原文档地址-- ...

  5. Next.js v4.1.4 文档中文翻译

    最近想稍稍看下 React的 SSR框架 Next.js,因为不想看二手资料, 所以自己跑到 Github上看,Next.js的文档是英文的,看倒是大概也能看得懂, 但有些地方不太确定,而且英文看着毕 ...

  6. RFC文档(中文翻译版本)

    RFC文档官方在线阅读地址:https://tools.ietf.org/rfc/index 以下是部分中文翻译的文档连接 RFC文档目录 RFC1 主机软件 RFC2 主机软件 RFC3 文档规范 ...

  7. Surround360 README文档——中文翻译

    该文档位于Surround360项目根目录下 翻译正文: #Surround360 系统 Surround360是用于捕获和渲染3D(立体声)360视频和照片的硬件和软件系统,适合在VR中浏览.我们将 ...

  8. Surround360 Render目录下CALIBRATION文档——中文翻译

    该文档位于Surround360/Surround_render目录下 翻译正文如下: #Surround360 校准 为了在VR中产生更准确和舒适的结果,Surround 360渲染软件使用多个校准 ...

  9. Surround360 Render目录下RENDER文档——中文翻译

    该文档位于Surround360/Surround_render目录下 翻译正文如下: #Surround360 Render 步骤 为了渲染捕获的素材,我们使用位于surround360_rende ...

  10. 1. ID3 tag version 2.3.0(非正式文档中文翻译)

    1. ID3 tag version 2.3.0 1.1 文档情况 本文档是一个非正式的标准,取代了id3v2.2.0标准.非正式标准的发布使得实现者可以在正式标准设定之前就有了一个设定的标准.正式标 ...

最新文章

  1. np.array_split 方法也可以分割列表list,如下
  2. 不要把游戏当游戏,要把游戏当明星
  3. ThreadLocal封装SimpleDateFormat
  4. 算法题目中经典问题(易错点)
  5. 【洛谷P4719】动态DP【LCT】【矩阵】
  6. php sem acquire,PHP | 关于php中sem_get failed for key no space left on device问题的解决方案...
  7. (转)VS.NET使用
  8. 中小企业 DevOps 从 0 到 1
  9. 遍历数据元素作为参数发送ajax jsonp请求
  10. docker : unable to prepare context: context must be a directory
  11. Android地图权限处理,Android 使用地图时的权限请求方法
  12. HTML5小试 双人贪吃蛇
  13. PCBLayout跳坑指南——PCB走线角度选择到底该不该90°?
  14. DHZT_ROS_Developer_Guide 大华中天ROS风格指南
  15. kappa一致性检验教程_诊断试验的一致性检验-Kappa
  16. python Beautiful Soup解析html页面table标签
  17. JPBC库应用之BLS签名
  18. android 提高启动速度慢,安卓启动速度过慢的原因及解决方法
  19. Unity UGUI Toggle监听onValueChanged
  20. [Matlab]脚本实现Excel单元格内容首尾空格删除

热门文章

  1. win7计算机摄像头怎么打开,告诉你win7如何打开摄像头
  2. mysql双机热备份_MySQL双机热备份试验
  3. Wiki管理工具有哪些?11款Wiki工具对比
  4. Http协议详解版本一
  5. 冯乐乐之二 shader的数学
  6. 从零开始实现Unity光照模型_02_为Shader添加简单的多光源支持_技术美术基础学习记录
  7. Delta并联机构在ADAMS仿真中的运动副设置
  8. “大圆满”之前行--从概念到知识再到计算的共生【原力】_目录规划与提要
  9. 深度学习训练模型的硬件条件(点评)
  10. 【数据挖掘】数据挖掘总结 ( K-Means 聚类算法 | 一维数据的 K-Means 聚类 ) ★