package util import ( "encoding/json" "gim/internal/business/comm/utils" "gim/pkg/logger" "time" "github.com/go-redis/redis" jsoniter "github.com/json-iterator/go" ) type RedisUtil struct { client *redis.Client } func NewRedisUtil(client *redis.Client) *RedisUtil { return &RedisUtil{client: client} } // Set 将指定值设置到redis中,使用json的序列化方式 func (u *RedisUtil) Set(key string, value interface{}, duration time.Duration) error { bytes, err := jsoniter.Marshal(value) if err != nil { logger.Sugar.Error(err) return err } err = u.client.Set(key, bytes, duration).Err() if err != nil { logger.Sugar.Error(err) return err } return nil } // Get 从redis中读取指定值,使用json的反序列化方式 func (u *RedisUtil) Get(key string, value interface{}) error { bytes, err := u.client.Get(key).Bytes() if err != nil { return err } err = jsoniter.Unmarshal(bytes, value) if err != nil { logger.Sugar.Error(err) return err } return nil } func (u *RedisUtil) HGetString(key string, HKey string) (string, error) { return u.client.Do("HGET", key, HKey).String() } func (u *RedisUtil) Exists(key string) bool { count, err := u.client.Do("EXISTS", key).Int() if count == 0 || err != nil { return false } return true } func (u *RedisUtil) HSet(key string, HKey string, data interface{}) (interface{}, error) { return u.client.HSet(key, HKey, data).Result() } func (u *RedisUtil) Expire(key string, ttl int) (interface{}, error) { return u.client.Do("EXPIRE", key, ttl).Result() } func (u *RedisUtil) Del(key string) (interface{}, error) { return u.client.Do("DEL", key).Result() } func (u *RedisUtil) Do(args ...interface{}) (reply interface{}, err error) { return u.client.Do(args...).String() } func (u *RedisUtil) SetEx(key string, data interface{}, ttl int) (reply interface{}, err error) { return u.client.Do("SETEX", key, ttl, data).Result() } func (u *RedisUtil) GetJson(key string, dst interface{}) error { b, err := utils.Bytes(u.client.Do("GET", key).Result()) if err != nil { return err } if err = json.Unmarshal(b, dst); err != nil { return err } return nil } func (u *RedisUtil) SetJson(key string, data interface{}, ttl int) bool { c, err := json.Marshal(data) if err != nil { return false } if ttl < 1 { err = u.Set(key, c, time.Duration(ttl)) } else { _, err = u.SetEx(key, c, ttl) } if err != nil { return false } return true }