0
点赞
收藏
分享

微信扫一扫

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

快乐小鱼儿_9911 2023-08-09 阅读 68
javaspring

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 条评论