我不会起名字322· 后端 / 算法 / 数据库
📘 技术栈 | 🧩 力扣 Hot100 | 🐹 Go 项目 | 🟥 Redis | 🐬 MySQL
文章目录
- Redis 从 0 到 1(一):安装环境配置 Redis——3 种方式跑通 + 10 项配置 + Go 第一个 PING
- 一、先从一个"连不上"的现场说起
- 二、方式一:Docker Compose(推荐,全系列统一环境)
- 三、方式二:Windows 开发机
- 四、方式三:Linux 源码编译(理解目录结构)
- 五、redis.conf 核心 10 项配置模板(收藏点 1)
- 六、Go 实操:发出第一个 PING(含完整工程骨架)
- 七、安装后必查的 5 条命令(收藏点 2)
- 八、总结与下一篇预告
Redis 从 0 到 1(一):安装环境配置 Redis——3 种方式跑通 + 10 项配置 + Go 第一个 PING
本篇是「Redis 从 0 到 1(Go 实战版)」系列开篇。整个系列用 Go 语言(go-redis v9)带你从安装环境一路打到线上排障:核心机制 → 实战场景 → 性能优化 → 故障排查,每一篇都有可运行的代码和能抄走的清单。
一、先从一个"连不上"的现场说起
几乎每个第一次装 Redis 的人都会撞上同一个现场:服务器上redis-server明明跑起来了,redis-cli在本机也能PING通,但应用一连接就是connection refused或者超时。排查一圈发现不是代码问题,而是安装时的三个默认配置在作怪:
| 坑 | 表现 | 原因 |
|---|---|---|
| bind 绑定 | 远程连接 refused | 默认只绑 127.0.0.1 |
| protected-mode | 远程连上但报错 DENIED | 无密码时保护模式拒绝外部访问 |
| 防火墙/安全组 | 连接超时(不是 refused) | 6379 端口没放行 |
本篇的目标:用 3 种方式把 Redis 7 跑起来,一次性把这 3 个坑的配置改对,最后用 Go 发出第一个 PING,为整个系列打好地基。
二、方式一:Docker Compose(推荐,全系列统一环境)
整个系列默认用这套环境,一份docker-compose.yml搞定:
services:redis:image:redis:7.2-alpinecontainer_name:redis-0to1ports:-"6379:6379"command:redis-server--appendonly yes--requirepass redis123volumes:-./data:/data-./redis.conf:/usr/local/etc/redis/redis.confrestart:unless-stopped启动与验证:
dockercompose up-ddockerexec-itredis-0to1 redis-cli-aredis123 PING# 返回 PONG 即成功三、方式二:Windows 开发机
Windows 没有官方包,两个可行选择:
# 选择 A:WSL2(推荐,和 Linux 行为一致)wsl--installwsl-esudoaptupdate&&wsl-esudoaptinstall-yredis-server wsl-esudoserviceredis-server start# 选择 B:Memurai 或微软旧版 Redis 移植(仅开发用,生产别用)wingetinstallMemurai.MemuraiDeveloper四、方式三:Linux 源码编译(理解目录结构)
wgethttps://download.redis.io/releases/redis-7.2.5.tar.gztarxzf redis-7.2.5.tar.gz&&cdredis-7.2.5make-j4&&sudomakeinstall# 安装后关键文件:/usr/local/bin/redis-server、redis-cli、redis-check-aof、redis-check-rdbsudomkdir-p/etc/redis /var/lib/redissudocpredis.conf /etc/redis/sudoredis-server /etc/redis/redis.conf五、redis.conf 核心 10 项配置模板(收藏点 1)
# 1. 绑定地址:开发环境放开本机+内网,生产按实际网卡配 bind 0.0.0.0 # 2. 保护模式:设了密码后可关闭;不设置密码时必须保持 yes protected-mode no # 3. 端口 port 6379 # 4. 密码(生产必配) requirepass redis123 # 5. 最大内存:生产必配,否则 OOM killer 找上门 maxmemory 512mb # 6. 淘汰策略:缓存场景推荐 allkeys-lru(第 6 篇细讲) maxmemory-policy allkeys-lru # 7. AOF 持久化:everysec 是性能与安全的平衡点(第 7 篇细讲) appendonly yes appendfsync everysec # 8. 慢查询日志:10000 微秒 = 10ms(第 21 篇细讲) slowlog-log-slower-than 10000 slowlog-max-len 1024 # 9. 最大连接数(第 25/34 篇会用到) maxclients 10000 # 10. 后台运行(容器内用 no,物理机用 yes) daemonize no六、Go 实操:发出第一个 PING(含完整工程骨架)
初始化项目(整个系列共用这个 module):
mkdirredis-0to1&&cdredis-0to1 go mod init redis-0to1 go get github.com/redis/go-redis/v9main.go——最小可运行程序,但把 context 超时和错误处理一次写对:
packagemainimport("context""fmt""time""github.com/redis/go-redis/v9")funcmain(){rdb:=redis.NewClient(&redis.Options{Addr:"127.0.0.1:6379",Password:"redis123",DB:0,DialTimeout:3*time.Second,// 建立连接超时ReadTimeout:2*time.Second,// 读超时:防止一次慢命令卡死调用方WriteTimeout:2*time.Second,// 写超时PoolSize:10,// 连接池大小(第 2 篇细讲)MaxRetries:3,// 失败重试次数})deferrdb.Close()// 所有命令都必须携带 context,超时由 context 兜底ctx,cancel:=context.WithTimeout(context.Background(),3*time.Second)defercancel()pong,err:=rdb.Ping(ctx).Result()iferr!=nil{// 连接失败最常见:密码错 / bind 限制 / 防火墙 —— 对照第一节的表panic(fmt.Sprintf("PING 失败: %v",err))}fmt.Println("Redis 返回:",pong)// 输出: Redis 返回: PONG}go run main.go# Redis 返回: PONG七、安装后必查的 5 条命令(收藏点 2)
| 命令 | 作用 | 期望输出 |
|---|---|---|
redis-cli -a redis123 PING | 连通性 | PONG |
INFO server | 版本/运行模式 | redis_version:7.2.x |
CONFIG GET maxmemory | 核对内存上限 | 与配置一致 |
CONFIG GET appendonly | 核对持久化 | yes |
INFO clients | 当前连接数 | connected_clients:1 |
排查顺序口诀:先 PING,再 CONFIG GET,最后 INFO——90% 的"装好了但行为不对"都是配置没生效(改完配置要重启或CONFIG REWRITE)。
八、总结与下一篇预告
- 三种安装方式里 Docker Compose 最适合做统一开发环境,全系列沿用;
- 连不上先查三件事:bind、protected-mode、防火墙;
- 10 项核心配置里,
maxmemory和密码是生产最低要求; - Go 侧第一条铁律:所有命令带 context、所有错误要处理。
下一篇预告:PING 通了,但把redis.NewClient直接搬上生产的项目,很多都在半夜被 EOF 咬过——下一篇《Go 连 Redis 为什么总在半夜报 EOF?连接池 5 个参数与 redisx 封装模板》,我们做出一个全系列复用的连接封装。