go-redis #
- **支持多种客户端:**支持单机Redis Server、Redis Cluster、Redis Sentinel、Redis分片服务器
- **自动处理数据类型:**go-redis会根据不同的redis命令处理成指定的数据类型,不必进行繁琐的数据类型转换
- **功能完善:**go-redis支持管道(pipeline)、事务、pub/sub、Lua脚本、mock、分布式锁等功能
官网:https://redis.uptrace.dev/zh/
安装 #
go get -u github.com/redis/go-redis/v9
获取连接 #
package database
import (
"context"
"fmt"
"github.com/redis/go-redis/v9"
"time"
)
type RedisConfig struct {
Host string // redis服务地址
Port string // redis服务端口
Password string // redis密码
DB int // 使用的DB
}
func InitRedisClient(config *RedisConfig) *redis.Client {
// 配置连接信息
option := redis.Options{
Addr: fmt.Sprintf("%s:%s", config.Host, config.Port),
Password: config.Password, // 密码
DB: config.DB, // redis一共16个库,指定其中一个库即可
//连接池容量及闲置连接数量
PoolSize: 15, // 连接池最大socket连接数,默认为4倍CPU数, 4 * runtime.NumCPU
MinIdleConns: 10, // 在启动阶段创建指定数量的Idle连接,并长期维持idle状态的连接数不少于指定数量;。
//超时
DialTimeout: 5 * time.Second, // 连接建立超时时间,默认5秒。
ReadTimeout: 3 * time.Second, // 读超时,默认3秒, -1表示取消读超时
WriteTimeout: 3 * time.Second, // 写超时,默认等于读超时
PoolTimeout: 4 * time.Second, // 当所有连接都处在繁忙状态时,客户端等待可用连接的最大等待时长,默认为读超时+1秒。
//命令执行失败时的重试策略
MaxRetries: 0, // 命令执行失败时,最多重试多少次,默认为0即不重试
MinRetryBackoff: 8 * time.Millisecond, // 每次计算重试间隔时间的下限,默认8毫秒,-1表示取消间隔
MaxRetryBackoff: 512 * time.Millisecond, // 每次计算重试间隔时间的上限,默认512毫秒,-1表示取消间隔
}
// 获取客户端实例
client := redis.NewClient(&option)
// 使用 Ping() 方法测试是否成功连接到 Redis 服务器
ctx := context.Background()
pong, err := client.Ping(ctx).Result()
if err != nil {
fmt.Println("Failed to connect to Redis:", err)
return nil
}
fmt.Println("Connected to Redis:", pong)
return client
}
操作 #
字符串 #
//新增
Set("test", "123456", 0) //参数三为过期时间,0则为不设置过期时间
SetNX("test", "123456", 0) //不存在则新增
//查询
Get("test")
GetSet("test", "1234") //插入新值返回旧值
//操作
Incr("test") //自增1
Decr("test") //自减1
通用操作 #
Keys("t*") //查询所有n开头的key
DBSize() //查询key总数
Exists("test", "test1") //查询key是否存在,返回存在的个数
Del("test", "test1") //批量删除key,返回删除个数
Expire("test", 3 * time.Second) //设置过期时间
TTL("test1") //查询过期时间,如果不过期返回-1s
Persist("test1") //去掉过期时间