8.1 GO通过redigo读写Redis

8.1.1 以go mod方式引入redigo包

  • step1. 编写redis.conf文件

(base) yanglei@yuanhong section8-1 % cat redis.conf 
# 指定default用户的密码 允许执行所有命令 允许访问所有key 允许访问所有频道
user default on >default_password ~* &* +@all

# 指定用户名和密码 允许执行所有命令 允许访问所有key 允许访问所有频道
user redis_user on >redis_password ~* &* +@all

# 指定端口
port 6379
  • step2. 启动redis-server

(base) yanglei@yuanhong ~ % redis-server /Users/yanglei/Desktop/StudyRedisBaseOnDocker/conf/chapter8/section8-1/redis.conf
  • step3. 使用go mod初始化项目

(base) yanglei@yuanhong operateRedis % pwd
/Users/yanglei/Desktop/StudyRedisBaseOnDocker/code/chapter8/section8-1/operateRedis
(base) yanglei@yuanhong operateRedis % go mod init operateRedis
go: creating new go.mod: module operateRedis
  • step4. 引入redigo包

编写main.go如下:

/Users/yanglei/Desktop/StudyRedisBaseOnDocker/code/chapter8/section8-1/operateRedis/main.go:

执行go mod tidy

  • step5. 运行

  • step6. 认证并确认连接

  • PING:该命令用于测试与Redis服务器的连接是否仍然活跃.若链接活跃则Redis服务器会回复PONG

修改main.go如下:

运行结果:

  • step7. 封装连接

工程结构如下:

conn/redis.go:

main.go:

  • step8. 测试

8.1.2 通过redigo读写Redis字符串

写入字符串

工程结构如下:

operate/set.go:

main.go:

运行结果:

读取字符串

工程结构如下:

operate/get.go:

main.go:

运行结果:

8.1.3 操作各种Redis命令

DEL指令

工程结构如下:

operate/del.go:

main.go:

运行结果:

KEYS指令

工程结构如下:

operate/keys.go:

main.go:

运行结果:

注:此处这2个key是我通过redis-cli事先添加进去的

EXISTS指令

工程结构如下:

operate/exists.go:

main.go:

运行结果:

也能通过该包使用其他Redis命令

8.1.4 以事务的方式操作Redis

工程结构如下:

operate/transaction.go:

main.go:

运行结果:

8.1.5 redis连接池

如果在项目中有多个GO客户端需要连接并操作Redis对象,那么每一次访问Redis都需要经历创建连接 -> 打开Redis并操作 -> 释放连接的步骤.连接和关闭数据库的操作比较浪费资源,如果频繁操作,会影响Redis甚至整个系统的性能,所以这种场景可以用redigo连接池来管理Redis的连接.

工程结构如下:

其中,conn/pool.go如下:

main.go:

运行结果:

8.1.6 用管道的方式提升操作性能

在单个客户端里,如果要读写大量数据,那么可以采用管道(pipeline)的方式.比如要一次性地执行20次的读写,那么每条命令都需要发送到Redis服务器,而每条命令的执行结果都需要返回给客户端.如果采用管道的方式,那么这20条命令会以批量的方式一次性地发送到服务器,而结果也会一次性地返回到客户端.

换言之,在大数据操作的场景里,通过管道的方式能大量节省"传输命令和结果的时间".

工程结构如下:

其中,operate/pipeline.go如下:

main.go如下:

运行结果:

Last updated