首页 > 数据库 >Go语言之 go-redis 基本使用

Go语言之 go-redis 基本使用

时间:2023-06-16 13:11:05浏览次数:54  
标签:nil err fmt redis Go rdb go

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

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

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

Go-Redis 中文文档https://redis.uptrace.dev/zh/

安装

go-redis 支持 2 个最新的 go 版本且依赖Go modules在新窗口打开,如果 你还没有 go mod,你需要首先初始化:

go mod init github.com/my/repo

安装 go-redis/v9 (支持所有的 redis 版本):

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

#连接到 Redis 服务器

连接到 Redis 服务器示例,更多配置参数,请参照 redis.Options:

import "github.com/redis/go-redis/v9"

rdb := redis.NewClient(&redis.Options{
	Addr:	  "localhost:6379",
	Password: "", // 没有密码,默认值
	DB:		  0,  // 默认DB 0
})

同时也支持另外一种常见的连接字符串:

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,
		ServerName: "you domain",
		//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: "你的域名",
	},
})

#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)
	},
	// SSH不支持超时设置,在这里禁用
	ReadTimeout:  -1,
	WriteTimeout: -1,
})

#dial tcp: i/o timeout

当你遇到 dial tcp: i/o timeout 错误时,表示 go-redis 无法连接 Redis 服务器,比如 redis 服务器没有 正常运行或监听了其他端口,以及可能被防火墙拦截等。你可以使用一些网络命令排查问题,例如 telnet:

telnet localhost 6379
Trying 127.0.0.1...
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 性能。

ctx := context.Background()

go-redis 实操 https://pkg.go.dev/github.com/go-redis/redis

安装

Code/go/redis_demo via 

标签:nil,err,fmt,redis,Go,rdb,go
From: https://www.cnblogs.com/QiaoPengjun/p/17485294.html

相关文章

  • 从0开始,精通Go语言Rest微服务架构和开发
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • springboot整合redis
    1、添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2、配置redis通过spring.redis.xxx来配置redis的信息spring.redis.hos......
  • 「有问必答」Go如何优雅的对时间进行格式化?
    昨天交流群关于「Go如何优雅的对时间进行格式化?」展开了讨论:咋搞捏?如何在不循环的情况下,把列表数据结构体的时间修改为咱们习惯的格式,而不是UTC模式我们要实现的效果如下:created_at是go语言原生的方式,updated_at是我们期望优化成的方式{"code":200,"d......
  • 面试-redis
    常见数据结构1.string2.hash3.list4.set5.sortedset持久化机制1.rdb快照在redis.conf种配置save9001#在900秒(15分钟)之后,如果⾄少有1个key发⽣变化,Redis就会⾃动触发BGSAVE命令创建快照。save30010#在300秒(5分钟)之后,如果⾄少有10个key发⽣变化,Redis就会⾃动......
  • springboot整合mongodb
    springboot整合mongodb整合mongodb其实与整合redis相差不大1、依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency&......
  • django项目更换数据库
    背景:在公司写的django项目跑的好好的,但是数据库所在的服务器电脑被搞挂了(也不知道被人安装什么了,服务起不起来了,只能重新安装数据库,django项目关联新的数据库),已有的项目要尽快恢复(原先的数据没办法找回了),只能重新关联一个。这里数据库安装不再赘述(一定一定要装linux系统的数据......
  • Redis哨兵模式的配置
    1.环境准备master节点1个slave节点2个sentinel【哨兵】节点3个redis版本5.0.3操作系统:Centos72.主从节点配置创建redis-conf目录,此目录用于存放主从节点的配置文件复制redis.conf,然后创建三个配置文件:redis-6379.conf,redis-6380.conf,redis-6381.conf编辑主节点的配置......
  • Go-map、切片、数组循环常见问题总结
    map1、forrangemap在开始执行循环的时候,底层做了随机种子,故其循环是随机的。packagemainimport"fmt"funcmain(){ a:=map[int]int{0:1,1:2,2:3,3:4,4:5} for_,c:=rangea{ fmt.Println(c) }}输出:34512多次执行,结果不同数组packagema......
  • AtCoder Beginner Contest 251 G Intersection of Polygons
    洛谷传送门AtCoder传送门经典结论,一个点\(P(x,y)\)在一个凸多边形内部\(S=\{(x_i,y_i)\}\)的充要条件是\(\foralli\in[1,n],(x_{i+1}-x_i,y_{i+1}-y_i)\times(x-x_i,y-y_i)\ge0\),其中\(S\)的点按照逆时针排列。然后我们运用叉积的一个性质......
  • Redis 缓存穿透、缓存击穿、缓存雪崩
    文章目录一、缓存穿透1.概念2.解决方案二、缓存击穿1.概念2.解决方案三、缓存雪崩1.概念2.解决方案一、缓存穿透1.概念key对应的数据在redis中并不存在,每次针对此key的请求从缓存获取不到,请求转发到数据库,访问量大了可能压垮数据库。比如用......