Redis客户端由gredis
模块实现,底层采用了链接池设计。
Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)。性能出色:Redis读取的速度是110000次/s,写的速度是81000次/s。
String: 字符串、Hash: 散列、List: 列表、Set: 集合、Sorted Set: 有序集合
PUB/SUB:发布订阅;
在5.0支持了全新数据类型:Streams
缓存,登录验证码,消息队列,过滤器,分布式锁,限流等
绝大部分情况下推荐使用g.Redis
单例方式来操作redis。因此同样推荐使用配置文件来管理Redis配置,在config.yaml
中的配置示例如下:
# Redis数据库配置
redis:
default:
address: 127.0.0.1:6379
db: 1
cache:
address: 127.0.0.1:6379
db: 1
pass: "123456"
idleTimeout: 600
其中,Redis的配置格式为:host:port[,db,pass?maxIdle=x&maxActive=x&idleTimeout=x&maxConnLifetime=x]
各配置项说明如下:
配置项名称 | 是否必须 | 默认值 | 说明 |
---|---|---|---|
address |
是 | - | 格式:地址:端口 支持Redis 单实例模式和集群模式配置,使用, 分割多个地址。例如:192.168.1.1:6379, 192.168.1.2:6379 |
db |
否 | 0 |
数据库索引 |
user |
否 | - |
访问授权用户 |
pass |
否 | - |
访问授权密码 |
minIdle |
否 | 0 |
允许闲置的最小连接数 |
maxIdle |
否 | 10 |
允许闲置的最大连接数(0 表示不限制) |
maxActive |
否 | 100 |
最大连接数量限制(0 表示不限制) |
idleTimeout |
否 | 10 |
连接最大空闲时间,使用时间字符串例如30s/1m/1d |
maxConnLifetime |
否 | 30 |
连接最长存活时间,使用时间字符串例如30s/1m/1d |
waitTimeout |
否 | 0 |
等待连接池连接的超时时间,使用时间字符串例如30s/1m/1d |
dialTimeout |
否 | 0 |
TCP 连接的超时时间,使用时间字符串例如30s/1m/1d |
readTimeout |
否 | 0 |
TCP 的Read 操作超时时间,使用时间字符串例如30s/1m/1d |
writeTimeout |
否 | 0 |
TCP 的Write 操作超时时间,使用时间字符串例如30s/1m/1d |
masterName |
否 | - |
哨兵模式下使用, 设置MasterName |
tls |
否 | false |
是否使用TLS 认证 |
tlsSkipVerify |
否 | false |
通过TLS 连接时,是否禁用服务器名称验证 |
cluster |
否 | false |
是否强制设置为集群工作模式。当address 是单个endpoint的集群时,系统会自动判定为单实例模式,这时需要设置此项为true 。 |
其中的default
和cache
分别表示配置分组名称,我们在程序中可以通过该名称获取对应配置的redis对象。不传递分组名称时,默认使用redis.default
配置分组项)来获取对应配置的redis客户端单例对象。
可以看到通过客户端gredis
模块提供了Get/HGet
等方法,用以获取可供方便转换的gvar.Var
通用变量结果。
通过gvar.Var
的强大转换功能可以转换为任意的数据类型,如基本数据类型Int
,String
,Strings
,或者结构体Struct
等等。
D:.
│ go.mod
│ go.sum
│ main.go
│
└─config
config.yaml
package main
import (
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
"github.com/gogf/gf/v2/database/gredis"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
ctx := gctx.New()
// redis字符串操作
g.Redis().Set(ctx, "k", "v")
v, _ := g.Redis().Get(ctx, "k")
g.Log().Info(ctx, v.String())
// 获取cache链接,DoVar转换
v2, _ := g.Redis("cache").Get(ctx, "k")
g.Log().Info(ctx, v2.String())
// setex
g.Redis().SetEX(ctx, "keyEx", "v4", 2000)
v3, _ := g.Redis().Get(ctx, "keyEx")
g.Log().Info(ctx, v3.String())
// list
g.Redis().RPush(ctx, "keyList", "v4")
v4, _ := g.Redis().LPop(ctx, "keyList")
g.Log().Info(ctx, v4.String())
// hash
g.Redis().HSet(ctx, "keyHash", g.Map{"v1": "v5"})
v5, _ := g.Redis().HGet(ctx, "keyHash", "v1")
g.Log().Info(ctx, v5.String())
// set
g.Redis().SAdd(ctx, "keySet", "v6")
v6, _ := g.Redis().SPop(ctx, "keySet")
g.Log().Info(ctx, v6.String())
// sort set
g.Redis().ZAdd(ctx, "keySortSet", &gredis.ZAddOption{}, gredis.ZAddMember{Score: 1, Member: "v7"})
v7, _ := g.Redis().ZRem(ctx, "keySortSet", "v7")
g.Log().Info(ctx, v7)
}
# Redis数据库配置
redis:
default:
address: 127.0.0.1:6379
db: 1
cache:
address: 127.0.0.1:6379
db: 1
pass: "123456"
idleTimeout: 600