有时需要一个后端存储,例如 redis, 它将使会话数据在服务器重启时保持水平扩展。
可以通过单个 `sessions.UseDatabase(database)`的调用来完成 sessions 数据库的注册。
Iris 实现了三个(3)内置的 session 数据库 [redis](https://redis.io/), [badger](https://github.com/dgraph-io/badger) 和 [boltdb](https://github.com/kataras/iris/wiki/github.com/etcd-io/bbolt)。 这些 session 数据库都通过 [iris/sessions/sessiondb](https://github.com/kataras/iris/tree/master/sessions/sessiondb) 子包实现,而且你都需要引入它们。
1. 引入 `gitbub.com/kataras/iris/sessions/sessiondb/redis 或者 boltdb 或者 badger`,
2. 初始化数据库并且
3. 注册它们。
例如,注册 redis session 数据库:
```source-go
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/sessions"
// 1\. 引入 session 数据库。
"github.com/kataras/iris/v12/sessions/sessiondb/redis"
)
// 2\. 初始化数据库。
// 这些是默认值,
// 你可以基于你运行中的 redis 服务器的设置去替换它们:
db := redis.New(redis.Config{
Network: "tcp",
Addr: "127.0.0.1:6379",
Timeout: time.Duration(30) * time.Second,
MaxActive: 10,
Password: "",
Database: "",
Prefix: "",
Delim: "-",
Driver: redis.Redigo(), // 可使用 redis.Radix() 代替。
})
// 可选择配置如下驱动程序:
// driver := redis.Redigo()
// driver.MaxIdle = ...
// driver.IdleTimeout = ...
// driver.Wait = ...
// redis.Config {Driver: driver}
// 当执行 control+C/cmd+C 时关闭连接
iris.RegisterOnInterrupt(func() {
db.Close()
})
sess := sessions.New(sessions.Config{
Cookie: "sessionscookieid",
AllowReclaim: true,
})
// 3\. 注册它们。
sess.UseDatabase(db)
// [...]
```
**boltdb**
```source-go
import "os"
import "github.com/kataras/iris/v12/sessions/sessiondb/boltdb"
db, err := boltdb.New("./sessions.db", os.FileMode(0750))
```
**badger**
```source-go
import "github.com/kataras/iris/v12/sessions/sessiondb/badger"
db, err := badger.New("./data")
```