Searching...

gredis

Redis客户端由gredis模块实现,底层采用了链接池设计,开发者无法手动Close链接对象。

使用方式:

import "gitee.com/johng/gf/g/database/gredis"

方法列表:godoc.org/github.com/johng-cn/gf/g/database/gredis

func New(address string, db ...interface{}) *Redis
func (r *Redis) Close() error

func (r *Redis) Do(command string, args ...interface{}) (interface{}, error)
func (r *Redis) Send(command string, args ...interface{}) error

func (r *Redis) SetIdleTimeout(value time.Duration)
func (r *Redis) SetMaxActive(value int)
func (r *Redis) SetMaxConnLifetime(value time.Duration)
func (r *Redis) SetMaxIdle(value int)

func (r *Redis) Stats() *PoolStats

gredis使用了连接池来进行Redis对象管理,通过Set*方法可以对连接池的属性进行管理,通过Stats方法可以获取连接池的统计信息。我们最常用的方法是DoSend方法,分别是同步和异步指令,通过向Redis Server发送对应的Redis API命令,来使用Redis Server的服务。

需要注意的是,Close方法是关闭链接池,而不是关闭当前的redis操作链接,只有在开发者期望自行维护gredis对象的时候才可能涉及到Close方法的使用。绝大部分情况下推荐使用g.Redis单例方式来操作redis。

以下是一个简单的使用gredis的示例:

package main

import (
    "fmt"
    "gitee.com/johng/gf/g/util/gconv"
    "gitee.com/johng/gf/g/database/gredis"
)

// 使用原生gredis.New操作redis,但是注意需要自己调用Close方法关闭redis链接池
func main() {
    redis := gredis.New(gredis.Config{
        Host : "127.0.0.1",
        Port : 6379,
    })
    defer redis.Close()
    redis.Do("SET", "k", "v")
    v, _ := redis.Do("GET", "k")
    fmt.Println(gconv.String(v))
}

该示例中,我们通过New方法创建一个Redis操作对象,并通过Do方法使用Redis Server的KV功能,随后我们再获取设置的信息。由于Do接口返回的都是interface{}类型的返回值,我们这里通过gconv模块将任何类型转换为string来进行显示。 执行后输出结果为:

v

全局配置

推荐使用g.Redis的方式来获取单例的gredis对象,并且由于gredis底层采用链接池的方式来管理客户端链接,因此开发者无须手动调用Close方式关闭链接对象(并且gredis没有提供关闭链接对象的Close方法,仅有直接关闭链接池Close方法,绝大部分情况下开发者无须关系底层redis链接池的状态维护)。

当然,像Redis这么常用的服务,也已经被对象管理器(g.*)进行了封装,其配置也可以通过配置文件进行管理,在config.toml中的配置示例如下:

# Redis数据库配置
[redis]
    default = "127.0.0.1:6379,0"
    cache   = "127.0.0.1:6379,1"

其中示例中的diskcache分别表示配置分组名称,我们在程序中可以通过该名称获取对应配置的redis对象。redis配置项格式为:host:port[,db[,pass]](即:地址:端口[,数据库DB[,密码]]),其中db(默认为0)及pass(默认为空)配置字段为非必须。随后我们可以通过g.Redis("分组名称")(不传递分组名称是,默认使用redis.default配置分组项)来获取对应配置的redis客户端单例对象。

示例如下:

package main

import (
    "fmt"
    "gitee.com/johng/gf/g"
    "gitee.com/johng/gf/g/util/gconv"
)

// 使用框架封装的g.Redis()方法获得redis操作对象单例,不需要开发者显示调用Close方法
func main() {
    g.Redis().Do("SET", "k", "v")
    v, _ := g.Redis().Do("GET", "k")
    fmt.Println(gconv.String(v))
}

执行后,输出结果为:

v