datasource/redisdb/redis.go (52 lines of code) (raw):
package redisdb
import (
"context"
"fmt"
"time"
"github.com/go-redis/redis/v8"
)
type Redis struct {
Address string
Password string
DbNum int
client *redis.Client
}
var redisPools = make(map[string]*Redis)
func GetRedis(name string) (*Redis, error) {
if _, ok := redisPools[name]; !ok {
return nil, fmt.Errorf("redis:not found, name:%s", name)
}
return redisPools[name], nil
}
func (r *Redis) Init() error {
rdb := redis.NewClient(&redis.Options{
Addr: r.Address,
Password: r.Password, // no password set
DB: r.DbNum, // use default DB
MaxRetries: 1,
DialTimeout: time.Second,
ReadTimeout: time.Second,
PoolSize: 1000,
MaxConnAge: 30 * time.Minute,
})
r.client = rdb
_, err := rdb.Ping(context.Background()).Result()
return err
}
func (r *Redis) GetClient() *redis.Client {
return r.client
}
func RegisterRedis(name, address, password string, database int) {
if _, ok := redisPools[name]; !ok {
m := &Redis{
Address: address,
Password: password,
DbNum: database,
}
err := m.Init()
if err != nil {
panic(err)
}
redisPools[name] = m
}
}