Go语言——用户登录信息保存redis并使用

Go语言——用户登录信息保存redis并使用

获取指定前缀的所有Keys

核心代码如下

// 获取指定前缀所有key
res, err := d.redis.cache.Do(ctx, "keys", "kafka*")
if err != nil {
    logging.Errorf("获取指定前缀keys失败!!%s", err)
}

// redis所有key转为列表
ret := make([]string, 10)
for _, item := range res.([]interface{}) {
    if keyStr, ok := item.([]byte); ok {
        ret = append(ret, string(keyStr))
    }
}

用户信息插入Redis

核心代码如下

func (r *RedisCache) InsertRedisUserTimeOut(ctx context.Context, data *model.UserInfo) error {
    if data == nil {
        return errors.New("param error")
    }
    key := getUserInfoRedisKey(data.UID)

    var ub []byte
    ub, marshalErr := json.Marshal(data)
    if marshalErr != nil {
        logging.Errorf("[InsertUser] json.Marshal failed !! %s", marshalErr)
        return marshalErr
    }

    bol, err := r.cache.Set(ctx, key, ub)
  if !bol {
  logging.Errorf("[InsertUser] r.cache.set failed!! %s", err)
  }
  return err
}

struct如下

// struct如下
type UserInfo struct {
    UID      int64  `json:"uid"`
    Nick     string `json:"nick"`
    Gender   int    `json:"gender"`
    Age      int    `json:"age"`
    Birthday string `json:"birthday"`
    Portrait string `json:"portrait"`
    SelfDesc string `json:"self_desc"`

    // 兼容老版协议
    ID          int64  `json:"id"`
    Name        string `json:"name"`
    AvatarURL   string `json:"avatar_url"`
    Description string `json:"description"`
}

获取用户信息

核心代码如下

/**
 * @Description: 获取所有用户信息
 * @receiver d
 * @param ctx
 * @return []model.UserInfo
 * @return error
 */
func (d *Dao) GetUserInfoAll(ctx context.Context) ([]model.UserInfo, error) {

    // 获取指定前缀所有key
    res, err := d.redis.cache.Do(ctx, "keys", "kafka:user_info*")
    if err != nil {
        logging.Errorf("获取指定前缀keys失败!!%s", err)
    }

    // redis所有key转为列表
    ret := make([]interface{}, 0)
    for _, item := range res.([]interface{}) {
        if keyStr, ok := item.([]byte); ok {
            ret = append(ret, keyStr)
        }
    }

    userInfoList := make([]model.UserInfo, 0)
    // 获取用户列表
    mgetArr, mgetErr := d.redis.cache.MGet(ctx, ret...)
    if mgetErr != nil {
        logging.Errorf("[GetUserInfoAll] d.redis.cache.MGet failed!! %s", mgetErr)
        return userInfoList, nil
    }

    for i := range mgetArr {
        bytes := mgetArr[i]
        if bytes != nil {
            var user model.UserInfo
            json.Unmarshal(bytes, &user)
            userInfoList = append(userInfoList, user)
        }
    }

    return userInfoList, nil
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值