123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- // redis操作接口
- // 秒寻科技
- // 2024-01-08
- // 周涛
- package redisapi
- import (
- "context"
- "encoding/json"
- "errors"
- "ipsomc/util"
- "reflect"
- "time"
- "github.com/go-redis/redis/v8"
- )
- type RedisApi struct {
- }
- // redis全局操作对象
- var (
- ctx context.Context
- rdsDb *redis.Client
- )
- // 打开redis
- func OpenRds(c context.Context, item string) error {
- ctx = c //保存上下文
- viper := util.GetViper()
- viper.SetDefault(item, map[string]interface{}{
- "address": "127.0.0.1:6379",
- "password": "",
- "database": 0,
- "dialTimeout": 1,
- "poolSize": 20,
- })
- rdsDb = redis.NewClient(&redis.Options{
- Addr: viper.GetString(item + ".address"),
- DB: viper.GetInt(item + ".database"),
- Password: viper.GetString(item + ".password"),
- DialTimeout: viper.GetDuration(item + ".dialTimeout"),
- PoolSize: viper.GetInt(item + ".poolSize"),
- })
- if err := rdsDb.Ping(ctx).Err(); err != nil {
- println(err.Error())
- panic("连接redis失败")
- }
- return nil
- }
- // 关闭redis
- func CloseRds() error {
- if err := rdsDb.Close(); err != nil {
- return err
- }
- return nil
- }
- // 设置模型数据
- // key:保存的键值,全局唯一
- // dwExpire:过期时间,单位秒
- func (obj *RedisApi) SetModelData(key string, dataModel interface{}, wExpire uint16) error {
- val := reflect.ValueOf(dataModel)
- if val.Kind() != reflect.Ptr {
- return errors.New("参数检查错误,应为指针类型")
- }
- val = val.Elem()
- if val.Kind() != reflect.Struct {
- return errors.New("参数检查错误,应为结构体指针类型")
- }
- //模型转map
- dataList, _ := json.Marshal(dataModel)
- //保存数据
- duration := time.Duration(wExpire)
- if err := rdsDb.Set(ctx, key, dataList, duration*time.Minute).Err(); err != nil {
- return err
- }
- return nil
- }
- // 获得模型数据
- func (obj *RedisApi) GetModelData(key string, dataModel interface{}) error {
- val := reflect.ValueOf(dataModel)
- if val.Kind() != reflect.Ptr {
- return errors.New("参数检查错误,应为指针类型")
- }
- val = val.Elem()
- if val.Kind() != reflect.Struct {
- return errors.New("参数检查错误,应为结构体指针类型")
- }
- byteList, err := rdsDb.Get(ctx, key).Result()
- if err != nil {
- return errors.New(err.Error())
- }
- if err := json.Unmarshal([]byte(byteList), dataModel); err != nil {
- return errors.New(err.Error())
- }
- return nil
- }
- // 设置过期时间
- func (obj *RedisApi) SetExpireTime(key string, byExpire uint8) {
- duration := time.Duration(byExpire)
- rdsDb.Expire(ctx, key, duration*time.Minute)
- }
|