加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结

发布时间:2020-12-16 18:29:06 所属栏目:大数据 来源:网络整理
导读:自定义 session 结构体: type Session struct {SessionID string `json:"sessionId" bson:"sessionId"`User *User `json:"-" bson:"user"`UserType string `json:"userType" bson:"userType"`NickName string `json:"nickName" bson:"nickName"`CreateTime t
自定义 session 结构体:
type Session struct {
	SessionID  string        `json:"sessionId" bson:"sessionId"`
	User       *User         `json:"-" bson:"user"`
	UserType   string        `json:"userType" bson:"userType"`
	NickName   string        `json:"nickName" bson:"nickName"`
	CreateTime time.Time     `json:"-" bson:"createTime"`
	UpdateTime time.Time     `json:"-" bson:"updateTime"`
	Expires    time.Time     `json:"-" bson:"expires"`
	Locale     string        `json:"-" bson:"locale"` // default is zh_CN
	Menus      []wmodel.Menu `json:"menus" bson:"menus"`
}

使用 json.Marshal 将结构体 json 化之后保存到 redis:
/*
	【增】
	描述:向 session 哈希表中插入一个 session 对象
	session 顶级 key,顶级 key 可以设置过期时间
	<[session]: 要插入的 session 对象
	>[error]:插入失败相关信息
*/
func (s *sessionService) addSession(session *model.Session) error {
	// 从池里获取连接
	conn := pool.Get()
	if conn == nil {
		log.Errorf("redis connnection is nil")
		return errors.New("redis connnection is nil")
	}
	// 用完后将连接放回连接池
	defer conn.Close()
	// 将session转换成json数据,注意:转换后的value是一个byte数组
	value,err := json.Marshal(session)
	if err != nil {
		log.Errorf("json marshal err,%s",err)
		return err
	}
	log.Infof("send data[%s]",session.SessionID,value)
	_,err = conn.Do("SET",value)
	if err != nil {
		return err
	}

	return nil
}

Golang 测试验证:
func TestAddSession(t *testing.T) {

    s := &model.Session{
        SessionID: "20150421120000",UserType:  "admin",NickName:  "df",}

    err := sService.addSession(s)
    if err != nil {
        t.Errorf("fail to add one session(%+v): %s",s,err)
        t.FailNow()
    }
}

redis 客户端查看该 session 保存情况:


参考资料

GO: How to save and retrieve a struct to redis using redigo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读