1
0
mirror of https://github.com/silenceper/wechat.git synced 2026-02-04 12:52:27 +08:00

Adaptation of new go-redis components (#546)

* [feature] Format the code and improve Mini Program authorization to obtain openid(miniprogram/auth/auth.go Code2Session)

* [feature] CheckEncryptedData (https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/user-info/auth.checkEncryptedData.html)

* upgrade json error

* upgrade json error

* [feature] Wallet Transfer returns the pointer object

* feat:Adaptation of new go-redis components

* improve code

* feat:upgrade golangci-lint-action version

* fix

* test ci

* fix

* test ci

* fix

* test

* improve code

* feat:GetPhoneNumber return ptr

Co-authored-by: houseme <houseme@outlook.com>
This commit is contained in:
houseme
2022-04-14 10:07:58 +08:00
committed by GitHub
parent 1b5c5fba67
commit 8e81a416c5
30 changed files with 232 additions and 153 deletions

94
cache/redis.go vendored
View File

@@ -1,15 +1,16 @@
package cache
import (
"encoding/json"
"context"
"time"
"github.com/gomodule/redigo/redis"
"github.com/go-redis/redis/v8"
)
// Redis .redis cache
type Redis struct {
conn *redis.Pool
ctx context.Context
conn redis.UniversalClient
}
// RedisOpts redis 连接属性
@@ -23,90 +24,49 @@ type RedisOpts struct {
}
// NewRedis 实例化
func NewRedis(opts *RedisOpts, dialOpts ...redis.DialOption) *Redis {
pool := &redis.Pool{
MaxActive: opts.MaxActive,
MaxIdle: opts.MaxIdle,
IdleTimeout: time.Second * time.Duration(opts.IdleTimeout),
Dial: func() (redis.Conn, error) {
dialOpts = append(dialOpts, []redis.DialOption{
redis.DialDatabase(opts.Database),
redis.DialPassword(opts.Password),
}...)
return redis.Dial("tcp", opts.Host, dialOpts...)
},
TestOnBorrow: func(conn redis.Conn, t time.Time) error {
if time.Since(t) < time.Minute {
return nil
}
_, err := conn.Do("PING")
return err
},
}
return &Redis{pool}
}
// SetRedisPool 设置redis连接池
func (r *Redis) SetRedisPool(pool *redis.Pool) {
r.conn = pool
func NewRedis(ctx context.Context, opts *RedisOpts) *Redis {
conn := redis.NewUniversalClient(&redis.UniversalOptions{
Addrs: []string{opts.Host},
DB: opts.Database,
Password: opts.Password,
IdleTimeout: time.Second * time.Duration(opts.IdleTimeout),
MinIdleConns: opts.MaxIdle,
})
return &Redis{ctx: ctx, conn: conn}
}
// SetConn 设置conn
func (r *Redis) SetConn(conn *redis.Pool) {
func (r *Redis) SetConn(conn redis.UniversalClient) {
r.conn = conn
}
// SetRedisCtx 设置redis ctx 参数
func (r *Redis) SetRedisCtx(ctx context.Context) {
r.ctx = ctx
}
// Get 获取一个值
func (r *Redis) Get(key string) interface{} {
conn := r.conn.Get()
defer conn.Close()
var data []byte
var err error
if data, err = redis.Bytes(conn.Do("GET", key)); err != nil {
result, err := r.conn.Do(r.ctx, "GET", key).Result()
if err != nil {
return nil
}
var reply interface{}
if err = json.Unmarshal(data, &reply); err != nil {
return nil
}
return reply
return result
}
// Set 设置一个值
func (r *Redis) Set(key string, val interface{}, timeout time.Duration) (err error) {
conn := r.conn.Get()
defer conn.Close()
var data []byte
if data, err = json.Marshal(val); err != nil {
return
}
_, err = conn.Do("SETEX", key, int64(timeout/time.Second), data)
return
func (r *Redis) Set(key string, val interface{}, timeout time.Duration) error {
return r.conn.SetEX(r.ctx, key, val, timeout).Err()
}
// IsExist 判断key是否存在
func (r *Redis) IsExist(key string) bool {
conn := r.conn.Get()
defer conn.Close()
result, _ := r.conn.Exists(r.ctx, key).Result()
a, _ := conn.Do("EXISTS", key)
i := a.(int64)
return i > 0
return result > 0
}
// Delete 删除
func (r *Redis) Delete(key string) error {
conn := r.conn.Get()
defer conn.Close()
if _, err := conn.Do("DEL", key); err != nil {
return err
}
return nil
return r.conn.Del(r.ctx, key).Err()
}

29
cache/redis_test.go vendored
View File

@@ -1,33 +1,40 @@
package cache
import (
"context"
"testing"
"time"
)
func TestRedis(t *testing.T) {
opts := &RedisOpts{
Host: "127.0.0.1:6379",
}
redis := NewRedis(opts)
var (
timeoutDuration = time.Second
ctx = context.Background()
opts = &RedisOpts{
Host: "127.0.0.1:6379",
}
redis = NewRedis(ctx, opts)
err error
val = "silenceper"
key = "username"
)
redis.SetConn(redis.conn)
var err error
timeoutDuration := 1 * time.Second
redis.SetRedisCtx(ctx)
if err = redis.Set("username", "silenceper", timeoutDuration); err != nil {
if err = redis.Set(key, val, timeoutDuration); err != nil {
t.Error("set Error", err)
}
if !redis.IsExist("username") {
if !redis.IsExist(key) {
t.Error("IsExist Error")
}
name := redis.Get("username").(string)
if name != "silenceper" {
name := redis.Get(key).(string)
if name != val {
t.Error("get Error")
}
if err = redis.Delete("username"); err != nil {
if err = redis.Delete(key); err != nil {
t.Errorf("delete Error , err=%v", err)
}
}