Go语言中的Redis操作:go-redis实战
Go语言中的Redis操作go-redis实战1. go-redis简介go-redis是Go语言中最流行的Redis客户端库提供了完整的Redis命令支持和连接池管理。本文将介绍如何使用go-redis进行Redis操作。2. 安装和连接go get github.com/redis/go-redis/v9package main import ( context fmt github.com/redis/go-redis/v9 ) func main() { client : redis.NewClient(redis.Options{ Addr: localhost:6379, Password: , // 无密码 DB: 0, // 默认DB }) ctx : context.Background() err : client.Ping(ctx).Err() if err ! nil { panic(err) } fmt.Println(Redis connected) }3. 基本操作3.1 String操作// 设置 err : client.Set(ctx, key, value, 0).Err() // 获取 val, err : client.Get(ctx, key).Result() // 设置过期时间 err : client.SetEX(ctx, key, value, time.Hour).Err() // 递增 val, err : client.Incr(ctx, counter).Result()3.2 Hash操作// 设置字段 err : client.HSet(ctx, user:1, name, Alice).Err() // 获取字段 name, err : client.HGet(ctx, user:1, name).Result() // 获取所有字段 fields, err : client.HGetAll(ctx, user:1).Result()3.3 List操作// 左侧入队 err : client.LPush(ctx, queue, item1, item2).Err() // 右侧出队 val, err : client.RPop(ctx, queue).Result() // 获取列表范围 vals, err : client.LRange(ctx, queue, 0, -1).Result()3.4 Set操作// 添加成员 err : client.SAdd(ctx, tags, go, redis).Err() // 获取所有成员 members, err : client.SMembers(ctx, tags).Result() // 判断成员是否存在 exists, err : client.SIsMember(ctx, tags, go).Result()4. 连接池配置client : redis.NewClient(redis.Options{ Addr: localhost:6379, PoolSize: 10, // 连接池大小 MinIdleConns: 5, // 最小空闲连接 MaxRetries: 3, // 最大重试次数 DialTimeout: 5 * time.Second, // 连接超时 ReadTimeout: 3 * time.Second, // 读取超时 WriteTimeout: 3 * time.Second, // 写入超时 })5. Pipeline和事务// Pipeline pipe : client.Pipeline() incr : pipe.Incr(ctx, counter) pipe.Expire(ctx, counter, time.Hour) _, err : pipe.Exec(ctx) count, _ : incr.Result() // 事务 err : client.Watch(ctx, func(tx *redis.Tx) error { // 事务操作 _, err : tx.TxPipelined(ctx, func(pipe redis.Pipeliner) error { pipe.Incr(ctx, counter) return nil }) return err }, counter)6. 总结使用go-redis时应注意合理配置连接池参数使用Pipeline批量操作提高效率正确处理错误和重试使用Watch实现乐观锁设置合理的超时时间