下面这段代码:
packagemainimport("context""fmt""github.com/redis/go-redis/v9")varctx=context.Background()funcmain(){rdb:=redis.NewClient(&redis.Options{Addr:"localhost:6379",Password:"",DB:0,})result,err:=rdb.Ping(ctx).Result()iferr!=nil{panic(err)}fmt.Println(result)}它的作用其实非常简单:
连接 Redis ↓ 测试 Redis 是否正常如果连接成功:
输出:
PONG一、整体运行流程
整个程序执行流程:
程序启动 ↓ 创建 Redis 客户端 ↓ 连接 Redis ↓ 发送 Ping ↓ Redis 返回 PONG ↓ 打印结果二、package main
packagemain表示:
这是一个可执行程序Go 里面:
只有:
packagemain才能运行。
三、import 导入包
import("context""fmt""github.com/redis/go-redis/v9")1. fmt
"fmt"Go 标准库。
用于:
打印输出例如:
fmt.Println("hello")2. context
"context"这个是:
上下文对象很多新人:
第一次看到:
ctx会懵。
实际上:
它本质上是:
请求生命周期管理器Redis、MySQL、Gin:
现在很多库都要求传 context。
四、为什么 Redis 要 context
例如:
Redis 查询超时怎么办? 请求取消怎么办?context 就是管理这些东西。
context.Background()
varctx=context.Background()意思:
创建一个最基础的上下文可以理解成:
先创建一个默认的上下文对象后面:
Redis 操作都需要它。
五、github.com/redis/go-redis/v9
"github.com/redis/go-redis/v9"这是:
Go 操作 Redis 的官方主流库类似:
Gin 是 Web 框架 Gorm 是 ORM go-redis 是 Redis 客户端六、redis.NewClient()
rdb:=redis.NewClient(...)作用:
创建 Redis 客户端你可以理解成:
创建一个 Redis 连接工具后面:
所有 Redis 操作:
都通过:
rdb进行。
七、redis.Options{}
redis.Options{Addr:"localhost:6379",Password:"",DB:0,}这是:
Redis 连接配置类似:
MySQL 的 DSN八、Addr 是什么
Addr:"localhost:6379"表示:
Redis 服务器地址localhost
当前电脑6379
Redis 默认端口。
所以:
localhost:6379意思:
连接本机 Redis九、Password
Password:""Redis 密码。
如果 Redis 没设置密码:
写空字符串如果有密码:
Password:"123456"十、DB
DB:0Redis 有:
多个逻辑数据库默认:
0~15总共:
16个库示例
DB 0 DB 1 DB 2 ...为什么有多个 DB
用于:
数据隔离例如:
| DB | 用途 |
|---|---|
| 0 | 用户 |
| 1 | 缓存 |
| 2 | 验证码 |
但真实开发:
很多公司:
只用 DB 0十一、rdb 到底是什么
rdb:=redis.NewClient(...)这里:
rdb本质:
是:
Redis客户端对象后面:
所有 Redis 操作:
都靠它。
例如:
rdb.Set()rdb.Get()rdb.Del()十二、Ping 是什么
result,err:=rdb.Ping(ctx).Result()很多协议:
都有:
Ping作用:
测试连接是否正常十三、Redis Ping 流程
程序:
发送: PINGRedis:
返回:
PONG就像:
你在吗? 我在。十四、这一行到底发生了什么
result,err:=rdb.Ping(ctx).Result()拆开理解。
第一步
rdb.Ping(ctx)向 Redis 发:
PING第二步
.Result()获取执行结果。
第三步
返回:
result errresult
Redis 返回的数据:
PONGerr
错误信息。
如果连接失败:
err!=nil十五、为什么 Go 都返回 err
Go 里面:
很多函数:
都会:
返回 值+err例如:
value,err:=xxx()这是 Go 核心思想:
显式错误处理十六、panic(err)
iferr!=nil{panic(err)}意思:
如果发生错误 程序直接崩溃 并打印错误例如:
Redis 没启动:
会报:
connect refused十七、fmt.Println(result)
fmt.Println(result)打印:
PONG说明:
Redis连接成功十八、整个底层流程(真正理解)
main() ↓ 创建 context ↓ 创建 Redis 客户端 ↓ 根据 Addr 连接 Redis ↓ 发送 PING ↓ Redis 返回 PONG ↓ 打印结果十九、为什么很多教程第一步都是 Ping
因为:
真正 Redis 操作之前:
必须先确认:
Redis能不能连上否则:
后面:
SET GET DEL都会失败。
二十、后面 Redis 操作都会长这样
例如:
SET
rdb.Set(ctx,"name","zhangsan",0)GET
rdb.Get(ctx,"name")DEL
rdb.Del(ctx,"name")你会发现:
所有操作都需要: rdb + ctx因为:
rdb 是 Redis 客户端 ctx 是上下文二十一、最后一句总结
这段代码本质:
创建 Redis 客户端 ↓ 连接 Redis ↓ 发送 PING 测试 ↓ 返回 PONG真正核心:
rdb 是 Redis 操作对象 ctx 是上下文 Options 是连接配置 Ping 用于测试连接