Go语言之 go-redis 基本使用

打印 上一主题 下一主题

主题 1937|帖子 1937|积分 5811

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Go语言之 go-redis 基本使用

Redis 介绍

Redishttps://redis.io/
Redis 中文网https://www.redis.net.cn/
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
macOS 安装Redis
  1. brew install redis
复制代码
Windows 安装 Redis

下载地址https://github.com/dmajkic/redis/tags/
https://github.com/ServiceStack/redis-windows
https://github.com/microsoftarchive/redis/releases
go-redis 使用

安装 go-redis 库 https://github.com/redis/go-redis
  1. go get github.com/redis/go-redis/v9
复制代码
Go-Redis 中文文档https://redis.uptrace.dev/zh/
安装

go-redis 支持 2 个最新的 go 版本且依赖Go modules在新窗口打开,如果 你还没有 go mod,你需要首先初始化:
  1. go mod init github.com/my/repo
复制代码
安装 go-redis/v9 (支持所有的 redis 版本):
  1. go get github.com/redis/go-redis/v9
复制代码
#连接到 Redis 服务器

连接到 Redis 服务器示例,更多配置参数,请参照 redis.Options:
  1. import "github.com/redis/go-redis/v9"
  2. rdb := redis.NewClient(&redis.Options{
  3.         Addr:          "localhost:6379",
  4.         Password: "", // 没有密码,默认值
  5.         DB:                  0,  // 默认DB 0
  6. })
复制代码
同时也支持另外一种常见的连接字符串:
  1. opt, err := redis.ParseURL("redis://<user>:<pass>@localhost:6379/<db>")
  2. if err != nil {
  3.         panic(err)
  4. }
  5. rdb := redis.NewClient(opt)
复制代码
#使用 TLS

你需要手动设置 tls.Config,你可以在 这里在新窗口打开 了解相关 tls.Config更多的配置信息:
  1. rdb := redis.NewClient(&redis.Options{
  2.         TLSConfig: &tls.Config{
  3.                 MinVersion: tls.VersionTLS12,
  4.                 ServerName: "you domain",
  5.                 //Certificates: []tls.Certificate{cert}
  6.         },
  7. })
复制代码
如果你使用的是域名连接,且遇到了类似 x509: cannot validate certificate for xxx.xxx.xxx.xxx because it doesn't contain any IP SANs的错误 ,应该在 ServerName 中指定你的域名:更多详情请参考本链接
  1. rdb := redis.NewClient(&redis.Options{
  2.         TLSConfig: &tls.Config{
  3.                 MinVersion: tls.VersionTLS12,
  4.                 ServerName: "你的域名",
  5.         },
  6. })
复制代码
#SSH 方式

使用 SSH 协议连接:
  1. sshConfig := &ssh.ClientConfig{
  2.         User:                         "root",
  3.         Auth:                         []ssh.AuthMethod{ssh.Password("password")},
  4.         HostKeyCallback: ssh.InsecureIgnoreHostKey(),
  5.         Timeout:                 15 * time.Second,
  6. }
  7. sshClient, err := ssh.Dial("tcp", "remoteIP:22", sshConfig)
  8. if err != nil {
  9.         panic(err)
  10. }
  11. rdb := redis.NewClient(&redis.Options{
  12.         Addr: net.JoinHostPort("127.0.0.1", "6379"),
  13.         Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) {
  14.                 return sshClient.Dial(network, addr)
  15.         },
  16.         // SSH不支持超时设置,在这里禁用
  17.         ReadTimeout:  -1,
  18.         WriteTimeout: -1,
  19. })
复制代码
#dial tcp: i/o timeout

当你遇到 dial tcp: i/o timeout 错误时,表示 go-redis 无法连接 Redis 服务器,比如 redis 服务器没有 正常运行或监听了其他端口,以及可能被防火墙拦截等。你可以使用一些网络命令排查问题,例如 telnet:
  1. telnet localhost 6379
  2. Trying 127.0.0.1...
  3. telnet: Unable to connect to remote host: Connection refused
复制代码
如果你使用 Docker、Kubernetes、Istio、Service Mesh、Sidecar 方式运行,应该确保服务在容器完全可用后启 动,你可以通过参考该地址、Readiness Gate、Istio holdApplicationUntilProxyStarts等。
Context 上下文

go-redis 支持 Context,你可以使用它控制 超时 或者传递一些数据, 也可以 监控 go-redis 性能。
  1. ctx := context.Background()
复制代码
go-redis 实操 https://pkg.go.dev/github.com/go-redis/redis

安装

[code]Code/go/redis_demo via
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表