- 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 保存情况: