Go-Redis (v9) 使用教程

1. 安装

go get github.com/redis/go-redis/v9

2. 基本连接

单机连接

import (
    "context"
    "github.com/redis/go-redis/v9"
)

// 创建 Redis 客户端
rdb := redis.NewClient(&redis.Options{
    Addr:     "localhost:6379",  // Redis 服务器地址
    Password: "",               // 密码
    DB:       0,               // 默认数据库
})

// 创建上下文
ctx := context.Background()

// 测试连接
pong, err := rdb.Ping(ctx).Result()
if err != nil {
    panic(err)
}

集群连接

rdb := redis.NewClusterClient(&redis.ClusterOptions{
    Addrs: []string{
        "localhost:7000",
        "localhost:7001",
        "localhost:7002",
    },
})

3. 基本操作

字符串操作

// 设置键值对
err := rdb.Set(ctx, "key", "value", 0).Err()

// 获取值
val, err := rdb.Get(ctx, "key").Result()

// 设置过期时间
err = rdb.Set(ctx, "key", "value", time.Hour).Err()

// 删除键
err = rdb.Del(ctx, "key").Err()

// 检查键是否存在
exists, err := rdb.Exists(ctx, "key").Result()

列表操作

// 从左侧推入
err := rdb.LPush(ctx, "list", "value1", "value2").Err()

// 从右侧推入
err = rdb.RPush(ctx, "list", "value3").Err()

// 获取列表范围
vals, err := rdb.LRange(ctx, "list", 0, -1).Result()

// 从左侧弹出
val, err := rdb.LPop(ctx, "list").Result()

集合操作

// 添加成员
err := rdb.SAdd(ctx, "set", "member1", "member2").Err()

// 获取所有成员
members, err := rdb.SMembers(ctx, "set").Result()

// 判断成员是否存在
exists, err := rdb.SIsMember(ctx, "set", "member1").Result()

// 移除成员
err = rdb.SRem(ctx, "set", "member1").Err()

哈希操作

// 设置哈希字段
err := rdb.HSet(ctx, "hash", "field1", "value1").Err()

// 获取哈希字段
val, err := rdb.HGet(ctx, "hash", "field1").Result()

// 获取所有字段和值
all, err := rdb.HGetAll(ctx, "hash").Result()

// 删除字段
err = rdb.HDel(ctx, "hash", "field1").Err()

4. 事务操作

// 开始事务
tx := rdb.TxPipeline()

// 添加命令到事务
tx.Set(ctx, "key1", "value1", 0)
tx.Set(ctx, "key2", "value2", 0)

// 执行事务
_, err := tx.Exec(ctx)

5. 管道操作

// 创建管道
pipe := rdb.Pipeline()

// 添加命令到管道
pipe.Set(ctx, "key1", "value1", 0)
pipe.Set(ctx, "key2", "value2", 0)

// 执行管道中的所有命令
_, err := pipe.Exec(ctx)

6. 发布订阅

// 订阅频道
pubsub := rdb.Subscribe(ctx, "mychannel")
defer pubsub.Close()

// 接收消息
for {
    msg, err := pubsub.ReceiveMessage(ctx)
    if err != nil {
        panic(err)
    }
    fmt.Println(msg.Channel, msg.Payload)
}

// 发布消息
err := rdb.Publish(ctx, "mychannel", "hello").Err()

7. 错误处理

val, err := rdb.Get(ctx, "nonexistent_key").Result()
switch {
case err == redis.Nil:
    fmt.Println("键不存在")
case err != nil:
    fmt.Println("错误:", err)
default:
    fmt.Println("值:", val)
}

8. 关闭连接

// 程序结束时关闭连接
defer rdb.Close()

注意事项

  1. 始终使用 context 来控制操作超时
  2. 正确处理错误,特别是 redis.Nil
  3. 在程序结束时关闭连接
  4. 对于大量操作,考虑使用管道或事务
  5. 合理设置连接池参数

这些是 go-redis v9 的基本用法,根据实际需求可以进一步探索更多功能。如果需要了解更详细的用法,可以参考官方文档

每日更新-免费小火箭账号
不要错过任何机会,探索最新的应用和游戏,就在我们的平台。
立即访问
最后修改:2024 年 12 月 27 日
如果觉得我的文章对你有用,请随意赞赏