使用Session以及基于redis实现分布式session
一.环境准备
由于gin框架不支持session,所以要引入第三方依赖。
go get -u github.com/gin-contrib/sessions
go get -u github.com/gin-contrib/sessions/cookie
二.中间件配置
r := gin.Default()
//NewStore创建基于cookie的存储引擎,secret123是用于加密的密钥
store := cookie.NewStore([]byte("secret123"))
//配置session中间件
r.Use(sessions.Sessions("mySession", store))
三.session在http请求时候设置
r.GET("/hello", func(context *gin.Context) {
session := sessions.Default(context)
session.Set("userName",123)
session.Save()
// dosomething
})
注意存储之后要调用Save方法。
四.session在http请求时候读取
r.GET("/hello", func(context *gin.Context) {
session := sessions.Default(context)
session.Get("userName")
// dosomething
})
五.设置session参数
option := sessions.Options{MaxAge: 3600}
session.Options(option)
这里的MaxAge单位是秒。 Options的其他参数如下
六.基于redis实现分布式session
6.1. 首先引入
go get -u github.com/gin-contrib/sessions/redis
6.2 配置gin
// 基于redis的session配置
store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret"))
r.Use(sessions.Sessions("mySession", store))
配置后就完成了分布式session的配置。多个节点请求访问的时候,根据sessionId都可以获取同一个redis中key对应的session信息。
GORM操作MySQL
一.环境准备
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
二.数据库连接配置
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
三.定义Model
注意数据库字段对应的model,首字母要大写
package models
// 结构体名称首字母大写
type User struct { // 默认对应的表名字是users
Id int
Name string
AddTime int // 数据库字段是add_time
}
// 指定对应的数据库表名字
func (User) TableName() string {
return "user"
}
- 注意结构体名的首字母需要大写。
- 字段名字要用驼峰规则。
- 结构体名字默认对应的数据库表是结构体名字的负数
users
。可以写一个TableName
方法手动指明对应操作的数据库表。
四.数据库操作
gorm主要就是熟练的过程,没有太多捷径可言。跟着官方文档来练习熟练即可。
grom文档: GORM 指南
本文正在参加技术专题18期-聊聊Go语言框架
扫描二维码关注公众号,回复:
14386696 查看本文章