You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gocache/redis.go

124 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package gocache
import (
"context"
"github.com/redis/go-redis/v9"
"go.dtapp.net/gojson"
"time"
)
// RedisConfig 配置
type RedisConfig struct {
DefaultExpiration time.Duration // 默认过期时间
Client *redis.Client // 驱动,可选
Debug bool // 调试,可选
}
// Redis https://github.com/go-redis/redis
type Redis struct {
config *RedisConfig // 配置
Client *redis.Client // 驱动
}
// NewRedis 实例化
func NewRedis(config *RedisConfig) *Redis {
c := &Redis{config: config}
c.Client = config.Client
return c
}
// Set 设置一个key的值
func (r *Redis) Set(key string, value interface{}, expiration time.Duration) (string, error) {
r.setLog(key)
return r.Client.Set(context.Background(), key, value, expiration).Result()
}
// SetInterface 设置一个key的值
func (r *Redis) SetInterface(key string, value interface{}, expiration time.Duration) (string, error) {
r.setLog(key)
marshal, _ := gojson.Marshal(value)
return r.Client.Set(context.Background(), key, marshal, expiration).Result()
}
// SetDefaultExpiration 设置一个key的值使用全局默认过期时间
func (r *Redis) SetDefaultExpiration(key string, value interface{}) (string, error) {
r.setLog(key)
return r.Client.Set(context.Background(), key, value, r.config.DefaultExpiration).Result()
}
// SetInterfaceDefaultExpiration 设置一个key的值使用全局默认过期时间
func (r *Redis) SetInterfaceDefaultExpiration(key string, value interface{}) (string, error) {
r.setLog(key)
marshal, _ := gojson.Marshal(value)
return r.Client.Set(context.Background(), key, marshal, r.config.DefaultExpiration).Result()
}
// Get 查询key的值
func (r *Redis) Get(key string) (string, error) {
r.getLog(key)
return r.Client.Get(context.Background(), key).Result()
}
// GetInterface 查询key的值
func (r *Redis) GetInterface(key string, result interface{}) error {
r.getLog(key)
ret, err := r.Client.Get(context.Background(), key).Result()
if err != nil {
return err
}
err = gojson.Unmarshal([]byte(ret), result)
return nil
}
// GetSet 设置一个key的值并返回这个key的旧值
func (r *Redis) GetSet(key string, value interface{}) (string, error) {
return r.Client.GetSet(context.Background(), key, value).Result()
}
// SetNX 如果key不存在则设置这个key的值
func (r *Redis) SetNX(key string, value interface{}, expiration time.Duration) error {
return r.Client.SetNX(context.Background(), key, value, expiration).Err()
}
// SetNXDefaultExpiration 如果key不存在则设置这个key的值使用全局默认过期时间
func (r *Redis) SetNXDefaultExpiration(key string, value interface{}) error {
return r.Client.SetNX(context.Background(), key, value, r.config.DefaultExpiration).Err()
}
// MGet 批量查询key的值
func (r *Redis) MGet(keys ...string) ([]interface{}, error) {
return r.Client.MGet(context.Background(), keys...).Result()
}
// MSet 批量设置key的值
// MSet(map[string]interface{}{"key1": "value1", "key2": "value2"})
func (r *Redis) MSet(values map[string]interface{}) error {
return r.Client.MSet(context.Background(), values).Err()
}
// Incr 针对一个key的数值进行递增操作
func (r *Redis) Incr(key string) (int64, error) {
return r.Client.Incr(context.Background(), key).Result()
}
// IncrBy 针对一个key的数值进行递增操作指定每次递增多少
func (r *Redis) IncrBy(key string, value int64) (int64, error) {
return r.Client.IncrBy(context.Background(), key, value).Result()
}
// Decr 针对一个key的数值进行递减操作
func (r *Redis) Decr(key string) (int64, error) {
return r.Client.Decr(context.Background(), key).Result()
}
// DecrBy 针对一个key的数值进行递减操作指定每次递减多少
func (r *Redis) DecrBy(key string, value int64) (int64, error) {
return r.Client.DecrBy(context.Background(), key, value).Result()
}
// Del 删除key操作支持批量删除
func (r *Redis) Del(keys ...string) error {
r.delLog(keys...)
return r.Client.Del(context.Background(), keys...).Err()
}