跳过正文
  1. 文章/
  2. GoLang/
  3. GoWeb/
  4. 数据库/

3、redis

·889 字·2 分钟· loading · loading · ·
GoLang GoWeb 数据库
GradyYoung
作者
GradyYoung
数据库 - 点击查看当前系列文章
§ 3、redis 「 当前文章 」

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") //去掉过期时间
数据库 - 点击查看当前系列文章
§ 3、redis 「 当前文章 」