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 6379step2. 启动redis-server
(base) yanglei@yuanhong ~ % redis-server /Users/yanglei/Desktop/StudyRedisBaseOnDocker/conf/chapter8/section8-1/redis.confstep3. 使用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 operateRedisstep4. 引入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指令
DEL指令工程结构如下:
operate/del.go:
main.go:
运行结果:
KEYS指令
KEYS指令工程结构如下:
operate/keys.go:
main.go:
运行结果:
注:此处这2个key是我通过redis-cli事先添加进去的
EXISTS指令
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