Golang Redis操作指南
最近在学习Golang操作Redis,想请教几个问题:
- 在Golang中连接Redis有哪些常用库?哪个性能最好?
- 如何优雅地处理Redis连接池的配置和连接断开重连问题?
- 对于常用的Redis操作如SET/GET/Hash操作,有哪些最佳实践需要注意?
- 在高并发场景下,如何避免Redis操作成为性能瓶颈?
- 能否分享一些实际项目中的Redis使用案例和踩坑经验?
2 回复
使用Go操作Redis,推荐使用go-redis库。安装:go get github.com/go-redis/redis/v8。基本操作包括连接、设置/获取键值、使用管道和事务。注意处理连接池和错误。适用于缓存、队列等场景。
更多关于Golang Redis操作指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang Redis操作指南
安装Redis客户端库
go get github.com/go-redis/redis/v8
基本连接配置
import (
"context"
"github.com/go-redis/redis/v8"
)
// 创建Redis客户端
func createRedisClient() *redis.Client {
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Redis地址
Password: "", // 密码
DB: 0, // 数据库
})
// 测试连接
ctx := context.Background()
_, err := rdb.Ping(ctx).Result()
if err != nil {
panic(err)
}
return rdb
}
常用操作示例
1. 字符串操作
// 设置键值
err := rdb.Set(ctx, "key", "value", 0).Err()
// 获取值
val, err := rdb.Get(ctx, "key").Result()
// 设置过期时间
err := rdb.SetEX(ctx, "key", "value", time.Hour).Err()
2. 哈希操作
// 设置哈希字段
err := rdb.HSet(ctx, "user:1", "name", "John", "age", 30).Err()
// 获取哈希字段
name, err := rdb.HGet(ctx, "user:1", "name").Result()
// 获取所有字段
userData, err := rdb.HGetAll(ctx, "user:1").Result()
3. 列表操作
// 左推入
err := rdb.LPush(ctx, "list", "item1", "item2").Err()
// 获取列表范围
items, err := rdb.LRange(ctx, "list", 0, -1).Result()
4. 集合操作
// 添加成员
err := rdb.SAdd(ctx, "set", "member1", "member2").Err()
// 获取所有成员
members, err := rdb.SMembers(ctx, "set").Result()
5. 有序集合操作
// 添加带分数的成员
err := rdb.ZAdd(ctx, "zset", &redis.Z{
Score: 1.5,
Member: "member1",
}).Err()
事务操作
pipe := rdb.TxPipeline()
pipe.Set(ctx, "key1", "value1", 0)
pipe.Set(ctx, "key2", "value2", 0)
_, err := pipe.Exec(ctx)
发布订阅
// 发布
err := rdb.Publish(ctx, "channel", "message").Err()
// 订阅
pubsub := rdb.Subscribe(ctx, "channel")
msg, err := pubsub.ReceiveMessage(ctx)
连接池配置
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
// 连接池配置
PoolSize: 10, // 最大连接数
MinIdleConns: 5, // 最小空闲连接数
MaxRetries: 3, // 最大重试次数
})
错误处理
val, err := rdb.Get(ctx, "key").Result()
if err == redis.Nil {
fmt.Println("key不存在")
} else if err != nil {
fmt.Println("错误:", err)
} else {
fmt.Println("值:", val)
}
注意事项
- 及时关闭连接:
defer rdb.Close() - 合理设置上下文超时
- 使用连接池提高性能
- 注意数据序列化格式
这个指南涵盖了Golang操作Redis的主要功能,可根据具体需求选择合适的方法。

