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(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |