Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?

前端之家收集整理的这篇文章主要介绍了Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
自定义 session 结构体:
  1. type Session struct {
  2. SessionID string `json:"sessionId" bson:"sessionId"`
  3. User *User `json:"-" bson:"user"`
  4. UserType string `json:"userType" bson:"userType"`
  5. NickName string `json:"nickName" bson:"nickName"`
  6. CreateTime time.Time `json:"-" bson:"createTime"`
  7. UpdateTime time.Time `json:"-" bson:"updateTime"`
  8. Expires time.Time `json:"-" bson:"expires"`
  9. Locale string `json:"-" bson:"locale"` // default is zh_CN
  10. Menus []wmodel.Menu `json:"menus" bson:"menus"`
  11. }

使用 json.Marshal 将结构体 json 化之后保存到 redis:
  1. /*
  2. 【增】
  3. 描述:向 session 哈希表中插入一个 session 对象
  4. session 顶级 key,顶级 key 可以设置过期时间
  5. <[session]: 要插入的 session 对象
  6. >[error]:插入失败相关信息
  7. */
  8. func (s *sessionService) addSession(session *model.Session) error {
  9. // 从池里获取连接
  10. conn := pool.Get()
  11. if conn == nil {
  12. log.Errorf("redis connnection is nil")
  13. return errors.New("redis connnection is nil")
  14. }
  15. // 用完后将连接放回连接池
  16. defer conn.Close()
  17. // 将session转换成json数据,注意:转换后的value是一个byte数组
  18. value,err := json.Marshal(session)
  19. if err != nil {
  20. log.Errorf("json marshal err,%s",err)
  21. return err
  22. }
  23. log.Infof("send data[%s]",session.SessionID,value)
  24. _,err = conn.Do("SET",value)
  25. if err != nil {
  26. return err
  27. }
  28.  
  29. return nil
  30. }

Golang 测试验证:
  1. func TestAddSession(t *testing.T) {
  2.  
  3. s := &model.Session{
  4. SessionID: "20150421120000",UserType: "admin",NickName: "df",}
  5.  
  6. err := sService.addSession(s)
  7. if err != nil {
  8. t.Errorf("fail to add one session(%+v): %s",s,err)
  9. t.FailNow()
  10. }
  11. }

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


参考资料

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

猜你在找的Go相关文章