当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
1 Star 0 Fork 0

Simbory/mego
暂停

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
memSessionProvider.go 1.57 KB
一键复制 编辑 原始数据 按行查看 历史
package mego
import (
"sync"
"time"
)
// memSessionProvider the memory session provider struct
type memSessionProvider struct {
dataMap sync.Map
sessionTimeout time.Duration
}
// Init init memory session provider
func (mem *memSessionProvider) Init(timeout time.Duration) error {
mem.sessionTimeout = timeout
return nil
}
// Read get memory session store by sid
func (mem *memSessionProvider) Read(sid string) SessionStore {
var store *memSessionStore
data, ok := mem.dataMap.Load(sid)
now := time.Now()
if !ok {
store = &memSessionStore{
sid: sid,
updateTime: now,
timeout: mem.sessionTimeout,
value: make(map[string]interface{}),
prov: mem,
}
} else {
store = data.(*memSessionStore)
if store.expired(now) {
store = &memSessionStore{
sid: sid,
updateTime: now,
timeout: mem.sessionTimeout,
value: make(map[string]interface{}),
prov: mem,
}
} else {
store.updateTime = now
}
}
return store
}
// Destroy delete session store in memory session by id
func (mem *memSessionProvider) Destroy(sid string) error {
mem.dataMap.Delete(sid)
return nil
}
// GC clean expired session stores in memory session
func (mem *memSessionProvider) GC() {
now := time.Now()
mem.dataMap.Range(func(key, data interface{}) bool {
store := data.(*memSessionStore)
if store.expired(now) {
mem.dataMap.Delete(key)
}
return true
})
}
// NewMemSessionProvider create a new memory session provider with default config
func NewMemSessionProvider() SessionProvider {
return &memSessionProvider{}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/simbory/mego.git
git@gitee.com:simbory/mego.git
simbory
mego
mego
master

搜索帮助