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
}