您现在的位置是:网站首页> Go语言
go-redis cluster 使用demo
- Go语言
- 2025-05-07
- 1070人已阅读
package main
import (
"context"
"fmt"
"time"
"github.com/redis/go-redis/v9"
)
func main() {
// 创建 Redis 集群客户端配置
// 这里配置多个 Redis 节点地址,确保高可用
rdb := redis.NewClusterClient(&redis.ClusterOptions{
// 配置集群节点地址,格式为 host:port
Addrs: []string{
"localhost:7001",
"localhost:7002",
"localhost:7003",
"localhost:7004",
"localhost:7005",
"localhost:7006",
},
// 设置连接池大小
PoolSize: 50,
// 设置命令执行超时时间
ReadTimeout: 2 * time.Second,
WriteTimeout: 2 * time.Second,
// 设置密码(如果有的话)
// Password: "your-password",
})
// 创建上下文对象
ctx := context.Background()
// 测试连接是否成功
_, err := rdb.Ping(ctx).Result()
if err != nil {
panic(fmt.Sprintf("连接Redis集群失败: %v", err))
}
fmt.Println("成功连接到Redis集群")
// 示例1:设置键值对
err = rdb.Set(ctx, "user:1", "张三", 24*time.Hour).Err()
if err != nil {
fmt.Printf("设置键值对失败: %v\n", err)
return
}
// 示例2:获取值
val, err := rdb.Get(ctx, "user:1").Result()
if err == redis.Nil {
fmt.Println("键不存在")
} else if err != nil {
fmt.Printf("获取值失败: %v\n", err)
} else {
fmt.Printf("user:1 的值为: %v\n", val)
}
// 示例3:使用哈希表
// HSET 命令示例
err = rdb.HSet(ctx, "user:profile:1", map[string]interface{}{
"name": "张三",
"age": 25,
"email": "zhangsan@example.com",
"active": true,
}).Err()
if err != nil {
fmt.Printf("设置哈希表失败: %v\n", err)
return
}
// 示例4:获取哈希表中的字段
name, err := rdb.HGet(ctx, "user:profile:1", "name").Result()
if err != nil {
fmt.Printf("获取哈希表字段失败: %v\n", err)
} else {
fmt.Printf("用户名: %v\n", name)
}
// 示例5:列表操作
// 从列表左侧添加元素
err = rdb.LPush(ctx, "recent:users", "user:1", "user:2").Err()
if err != nil {
fmt.Printf("列表操作失败: %v\n", err)
}
// 示例6:事务操作
txf := func(tx *redis.Tx) error {
// 获取当前值
n, err := tx.Get(ctx, "counter").Int()
if err != nil && err != redis.Nil {
return err
}
// 实际的操作
n++
// 执行命令列表
_, err = tx.TxPipelined(ctx, func(pipe redis.Pipeliner) error {
pipe.Set(ctx, "counter", n, 0)
return nil
})
return err
}
// 执行事务
if err := rdb.Watch(ctx, txf, "counter"); err != nil {
fmt.Printf("事务执行失败: %v\n", err)
}
// 关闭连接
defer func() {
if err := rdb.Close(); err != nil {
fmt.Printf("关闭Redis连接失败: %v\n", err)
}
}()
}
这个示例代码包含了以下主要功能:
1. 创建并配置 Redis 集群客户端
- 配置多个节点地址
- 设置连接池大小
- 设置超时时间
- 可选的密码认证
2. 基本操作示例
- 键值对的设置和获取
- 哈希表操作
- 列表操作
- 事务处理
3. 错误处理
- 连接错误处理
- 操作错误处理
- 优雅关闭连接
下一篇:Go指针转换