在高性能应用开发中,Redis 凭借其内存存储和高效的数据结构,常用于缓存、会话管理、计数器、消息队列等场景。
Go 语言可以通过官方推荐的 Redis 客户端库 go-redis 来与 Redis 交互。本文将演示如何:
-
- 连接 Redis
-
- 执行字符串操作(
SET
、GET
、INCR
、DEL
)
- 执行字符串操作(
-
- 设置键的过期时间
一、环境准备
安装 go-redis 库:
go
go get github.com/redis/go-redis/v9
本地需运行 Redis 服务,可以用 Docker 快速启动:
arduino
docker run -d -p 6379:6379 redis
二、初始化 Redis 连接
go
package main
import (
"context"
"fmt"
"github.com/redis/go-redis/v9"
"log"
"time"
)
var ctx = context.Background()
var rdb *redis.Client
func initRedis() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Redis 地址
Password: "", // 无密码
DB: 0, // 默认 DB
})
// 测试连接
_, err := rdb.Ping(ctx).Result()
if err != nil {
log.Fatal("Redis 连接失败:", err)
}
log.Println("Redis 连接成功")
}
三、Redis 字符串操作
1. 设置键值
go
func setValue() {
err := rdb.Set(ctx, "username", "gopher", time.Minute).Err()
if err != nil {
log.Println("设置失败:", err)
return
}
log.Println("设置成功: username=gopher (有效期1分钟)")
}
2. 获取键值
c
func getValue() {
val, err := rdb.Get(ctx, "username").Result()
if err == redis.Nil {
log.Println("key 不存在")
} else if err != nil {
log.Println("获取失败:", err)
} else {
log.Println("获取成功: username=", val)
}
}
3. 自增计数器
go
func incrCounter() {
val, err := rdb.Incr(ctx, "counter").Result()
if err != nil {
log.Println("自增失败:", err)
return
}
log.Println("计数器值:", val)
}
4. 删除键
go
func deleteKey() {
_, err := rdb.Del(ctx, "username").Result()
if err != nil {
log.Println("删除失败:", err)
return
}
log.Println("删除成功: username")
}
四、测试执行
scss
func main() {
initRedis()
setValue()
getValue()
incrCounter()
incrCounter()
deleteKey()
getValue()
}
五、运行效果
makefile
Redis 连接成功
设置成功: username=gopher (有效期1分钟)
获取成功: username= gopher
计数器值: 1
计数器值: 2
删除成功: username
key 不存在
六、总结
通过本案例,我们学习了:
- • 使用 go-redis 连接 Redis
- • 字符串操作:
SET
、GET
、INCR
、DEL
- • 设置过期时间,控制缓存生命周期
👉 Redis 的字符串操作非常适合做:
- • 缓存热点数据(比如用户信息、文章内容)
- • 分布式计数器(比如点赞数、访问量统计)
- • 临时令牌存储(比如登录验证码)