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.
197 lines
4.9 KiB
197 lines
4.9 KiB
2 years ago
|
package jredis
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"git.gz.internal.jumaiyx.cn/jm/jmproto/conf"
|
||
|
"git.gz.internal.jumaiyx.cn/pkg/log"
|
||
|
"github.com/go-redis/redis/v8"
|
||
|
"github.com/pkg/errors"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// todo 往后封包
|
||
|
const (
|
||
|
NullString = ""
|
||
|
)
|
||
|
|
||
|
type Cache struct {
|
||
|
log log.Logger
|
||
|
client *redis.Client
|
||
|
}
|
||
|
|
||
|
func NewCache(log log.Logger, c *conf.Data_Redis) *Cache {
|
||
|
client := redis.NewClient(&redis.Options{
|
||
|
Network: c.Network,
|
||
|
Addr: c.Addr,
|
||
|
Password: c.Password,
|
||
|
PoolSize: 10,
|
||
|
})
|
||
|
return &Cache{
|
||
|
log: log,
|
||
|
client: client,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) Get(ctx context.Context, key string) (string, error) {
|
||
|
val, err := rdb.client.Get(ctx, key).Result()
|
||
|
if err != nil {
|
||
|
if errors.Is(err, redis.Nil) {
|
||
|
return NullString, nil
|
||
|
}
|
||
|
rdb.log.Errorf("redis cache get err:%v", err)
|
||
|
return NullString, err
|
||
|
}
|
||
|
return val, nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) Set(ctx context.Context, key string, value interface{}) error {
|
||
|
err := rdb.client.Set(ctx, key, value, 0).Err()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache set err:%v", err)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) Incr(ctx context.Context, key string) (int64, error) {
|
||
|
result, err := rdb.client.Incr(ctx, key).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache incr err:%v", err)
|
||
|
return result, err
|
||
|
}
|
||
|
return result, nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) Decr(ctx context.Context, key string) (int64, error) {
|
||
|
result, err := rdb.client.Decr(ctx, key).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache decr err:%v", err)
|
||
|
return result, err
|
||
|
}
|
||
|
return result, nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) SetExp(ctx context.Context, key string, value interface{}, exp time.Duration) error {
|
||
|
err := rdb.client.Set(ctx, key, value, exp).Err()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache set exp err:%v", err)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) Del(ctx context.Context, key string) error {
|
||
|
_, err := rdb.client.Del(ctx, key).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis del err:%v", err)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) ZAdd(ctx context.Context, key string, z *redis.Z) (int64, error) {
|
||
|
result, err := rdb.client.ZAdd(ctx, key, z).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache zadd err:%v", err)
|
||
|
return 0, err
|
||
|
}
|
||
|
return result, err
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) ZIncrBy(ctx context.Context, key string, member string, incr float64) error {
|
||
|
_, err := rdb.client.ZIncrBy(ctx, key, incr, member).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache zadd err:%v", err)
|
||
|
return err
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) ZRange(ctx context.Context, key string, tart, stop int64) ([]string, error) {
|
||
|
result, err := rdb.client.ZRange(ctx, key, tart, stop).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache zrange err:%v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
return result, nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) ZRevRange(ctx context.Context, key string, tart, stop int64) ([]string, error) {
|
||
|
result, err := rdb.client.ZRevRange(ctx, key, tart, stop).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache ZRevRange err:%v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
return result, nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) ZRevRangeWithScores(ctx context.Context, key string, tart, stop int64) ([]redis.Z, error) {
|
||
|
result, err := rdb.client.ZRevRangeWithScores(ctx, key, tart, stop).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache ZRevRange err:%v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
return result, nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) ZRem(ctx context.Context, key string, number string) error {
|
||
|
_, err := rdb.client.ZRem(ctx, key, number).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("Redis cache ZRem err:%v", err)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) ZScore(ctx context.Context, key string, number string) (float64, error) {
|
||
|
result, err := rdb.client.ZScore(ctx, key, number).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("Redis cache ZScore err:%v", err)
|
||
|
return 0, err
|
||
|
}
|
||
|
return result, nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) HSet(ctx context.Context, hkey string, key, value interface{}) error {
|
||
|
_, err := rdb.client.HSet(ctx, hkey, key, value).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache hset err:%v", err)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) HSetExp(ctx context.Context, hkey string, key, value interface{}, duration time.Duration) error {
|
||
|
err := rdb.client.HSet(ctx, hkey, key).Err()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache hset Expire err:%v", err)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
err = rdb.client.Expire(ctx, hkey, duration).Err()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache hset Expire err:%v", err)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) HGet(ctx context.Context, hkey string, key string) (string, error) {
|
||
|
result, err := rdb.client.HGet(ctx, hkey, key).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("redis cache hset Expire err:%v", err)
|
||
|
return "", err
|
||
|
}
|
||
|
return result, err
|
||
|
}
|
||
|
|
||
|
func (rdb Cache) HKeys(ctx context.Context, hkey string) ([]string, error) {
|
||
|
result, err := rdb.client.HKeys(ctx, hkey).Result()
|
||
|
if err != nil {
|
||
|
rdb.log.Errorf("Get Redis cache hkeys err:%v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
return result, nil
|
||
|
}
|