新聞中心
文件存儲(chǔ)
在默認(rèn)情況下,?ghttp.Server?的?Session?存儲(chǔ)使用了內(nèi)存+文件的方式,使用?StorageFile?對(duì)象實(shí)現(xiàn)。具體原理為:

創(chuàng)新互聯(lián)建站主營(yíng)石城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開(kāi)發(fā),石城h5小程序設(shè)計(jì)搭建,石城網(wǎng)站營(yíng)銷(xiāo)推廣歡迎石城等地區(qū)企業(yè)咨詢(xún)
- ?
Session?的數(shù)據(jù)操作完全基于內(nèi)存; - 使用?
gcache?進(jìn)程緩存模塊控制數(shù)據(jù)過(guò)期; - 使用文件存儲(chǔ)持久化存儲(chǔ)管理?
Session?數(shù)據(jù); - 當(dāng)且僅有當(dāng)?
Session?被標(biāo)記為?dirty?時(shí)(數(shù)據(jù)有更新)才會(huì)執(zhí)行?Session?序列化并執(zhí)行文件持久化存儲(chǔ); - 當(dāng)且僅當(dāng)內(nèi)存中的?
Session?不存在時(shí),才會(huì)從文件存儲(chǔ)中反序列化恢復(fù)?Session?數(shù)據(jù)到內(nèi)存中,降低IO調(diào)用; - 序列化/反序列化使用的是標(biāo)準(zhǔn)庫(kù)的?
json.Marshal?/?UnMarshal?方法;
從原理可知,當(dāng)?Session?為讀多寫(xiě)少的場(chǎng)景中,?Session?的數(shù)據(jù)操作非常高效。
有個(gè)注意的細(xì)節(jié),由于文件存儲(chǔ)涉及到文件操作,為便于降低?IO?開(kāi)銷(xiāo)并提高?Session?操作性能,并不是每一次?Session?請(qǐng)求結(jié)束后都會(huì)立即刷新對(duì)應(yīng)?Session?的?TTL?時(shí)間。而只有當(dāng)涉及到更新操作(被標(biāo)記為?dirty?)時(shí)才會(huì)立即刷新其?TTL?;針對(duì)于讀取請(qǐng)求,將會(huì)每隔一分鐘更新前一分鐘內(nèi)讀取操作對(duì)應(yīng)的?Session?文件?TTL?時(shí)間,以便于?Session?自動(dòng)續(xù)活。
使用示例
package main
import (
"github.com/GOgf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gtime"
"time"
)
func main() {
s := g.Server()
s.SetConfigWithMap(g.Map{
"SessionMaxAge": time.Minute,
})
s.Group("/", func(group *ghttp.RouterGroup) {
group.ALL("/set", func(r *ghttp.Request) {
r.Session.Set("time", gtime.Timestamp())
r.Response.Write("ok")
})
group.ALL("/get", func(r *ghttp.Request) {
r.Response.Write(r.Session.Map())
})
group.ALL("/del", func(r *ghttp.Request) {
r.Session.Clear()
r.Response.Write("ok")
})
})
s.SetPort(8199)
s.Run()
}在該實(shí)例中,為了方便觀察過(guò)期失效,我們將?Session?的過(guò)期時(shí)間設(shè)置為1分鐘。執(zhí)行后,
- 首先,訪(fǎng)問(wèn) http://127.0.0.1:8199/set 設(shè)置一個(gè)?
Session?變量; - 隨后,訪(fǎng)問(wèn) http://127.0.0.1:8199/get 可以看到該?
Session?變量已經(jīng)設(shè)置并成功獲取; - 接著,我們停止程序,并重新啟動(dòng),再次訪(fǎng)問(wèn) http://127.0.0.1:8199/get ,可以看到?
Session?變量已經(jīng)從文件存儲(chǔ)中恢復(fù); - 等待1分鐘后,再次訪(fǎng)問(wèn) http://127.0.0.1:8199/get 可以看到已經(jīng)無(wú)法獲取該?
Session?,因?yàn)樵?Session?已經(jīng)過(guò)期;
網(wǎng)頁(yè)名稱(chēng):創(chuàng)新互聯(lián)GoFrame教程:GoFrame Session-File
鏈接URL:http://www.5511xx.com/article/cochsoe.html


咨詢(xún)
建站咨詢(xún)
