Gin框架使用Session以及基于redis实现分布式session & GORM操作MySQL

使用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的其他参数如下

image.png

六.基于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))

image.png

配置后就完成了分布式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方法手动指明对应操作的数据库表。

image.png

四.数据库操作

gorm主要就是熟练的过程,没有太多捷径可言。跟着官方文档来练习熟练即可。

grom文档: GORM 指南


本文正在参加技术专题18期-聊聊Go语言框架

扫描二维码关注公众号,回复: 14386696 查看本文章

猜你喜欢

转载自juejin.im/post/7120875923745800205
今日推荐