init
This commit is contained in:
144
myredis/redis.go
Normal file
144
myredis/redis.go
Normal file
@@ -0,0 +1,144 @@
|
||||
package redis
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/go-redis/redis/v8"
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
DefaultConfig = &Config{
|
||||
Addr: "127.0.0.1:6379",
|
||||
Password: "",
|
||||
DB: 0,
|
||||
PoolSize: 16,
|
||||
MinIdleConn: 4,
|
||||
MaxConnAge: "1h",
|
||||
IdleTimeout: "10m",
|
||||
}
|
||||
)
|
||||
|
||||
type (
|
||||
MyRedis struct {
|
||||
Redis *redis.Client
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
Config struct {
|
||||
Addr string
|
||||
Password string
|
||||
DB int
|
||||
PoolSize int
|
||||
MinIdleConn int
|
||||
MaxConnAge string
|
||||
IdleTimeout string
|
||||
}
|
||||
)
|
||||
|
||||
func New(config *Config) (*MyRedis, error) {
|
||||
var (
|
||||
maxConnAge, _ = time.ParseDuration(DefaultConfig.MaxConnAge)
|
||||
idleTimeout, _ = time.ParseDuration(DefaultConfig.IdleTimeout)
|
||||
)
|
||||
|
||||
if config.PoolSize <= 0 {
|
||||
config.MinIdleConn = DefaultConfig.PoolSize
|
||||
}
|
||||
|
||||
if config.MinIdleConn <= 0 {
|
||||
config.MinIdleConn = DefaultConfig.MinIdleConn
|
||||
}
|
||||
|
||||
if config.MaxConnAge != "" {
|
||||
t, err := time.ParseDuration(config.MaxConnAge)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("parse MaxConnAge err: %s\n", err)
|
||||
|
||||
}
|
||||
maxConnAge = t
|
||||
}
|
||||
|
||||
if config.IdleTimeout != "" {
|
||||
t, err := time.ParseDuration(config.IdleTimeout)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("parse IdleTimeout err: %s\n", err)
|
||||
|
||||
}
|
||||
idleTimeout = t
|
||||
}
|
||||
|
||||
client := redis.NewClient(&redis.Options{
|
||||
Addr: config.Addr,
|
||||
Password: config.Password,
|
||||
DB: config.DB,
|
||||
PoolSize: config.PoolSize,
|
||||
MinIdleConns: config.MinIdleConn,
|
||||
MaxConnAge: maxConnAge,
|
||||
IdleTimeout: idleTimeout,
|
||||
})
|
||||
|
||||
ctx := context.Background()
|
||||
rd := &MyRedis{}
|
||||
rd.ctx = ctx
|
||||
rd.Redis = client
|
||||
ping := rd.Redis.Ping(ctx)
|
||||
if ping.Err() != nil {
|
||||
return nil, fmt.Errorf("connet redis err: %s", ping.Err())
|
||||
}
|
||||
|
||||
return rd, nil
|
||||
}
|
||||
|
||||
// Get 通用get
|
||||
func (r *MyRedis) Get(key string) (string, error) {
|
||||
return r.Redis.Get(r.ctx, key).Result()
|
||||
}
|
||||
|
||||
// Set 通用set
|
||||
func (r *MyRedis) Set(key string, value interface{}, t ...time.Duration) (string, error) {
|
||||
var t2 time.Duration
|
||||
if len(t) > 0 {
|
||||
t2 = t[0]
|
||||
}
|
||||
return r.Redis.Set(r.ctx, key, value, t2).Result()
|
||||
}
|
||||
|
||||
// GetJson json序列化
|
||||
func (r *MyRedis) GetJson(key string) (interface{}, error) {
|
||||
res := r.Redis.Get(r.ctx, key)
|
||||
if res.Err() != nil {
|
||||
return nil, res.Err()
|
||||
}
|
||||
|
||||
b, err := res.Bytes()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("get key:%s 反序列化json失败(-1)", key)
|
||||
}
|
||||
var result interface{}
|
||||
err = jsoniter.Unmarshal(b, &result)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("get key:%s 反序列化json失败(-2)", key)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// SetJson json序列化set
|
||||
func (r *MyRedis) SetJson(key string, value interface{}, t ...time.Duration) (string, error) {
|
||||
var t2 time.Duration
|
||||
if len(t) > 0 {
|
||||
t2 = t[0]
|
||||
}
|
||||
v, err := jsoniter.Marshal(value)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("set key:%s 序列化json失败", key)
|
||||
}
|
||||
return r.Redis.Set(r.ctx, key, v, t2).Result()
|
||||
}
|
||||
|
||||
func (r *MyRedis) Close() {
|
||||
if r.Redis != nil {
|
||||
r.Redis.Close()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user