mirror of
https://github.com/snowykami/server-status-server.git
synced 2025-09-06 20:16:27 +00:00
✨ first comm
This commit is contained in:
80
dao/mem_store.go
Normal file
80
dao/mem_store.go
Normal file
@ -0,0 +1,80 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"github.com/LiteyukiStudio/go-logger/log"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
var memStore = make(map[string]interface{})
|
||||
|
||||
func Save(key string, value interface{}) {
|
||||
memStore[key] = value
|
||||
}
|
||||
|
||||
func Delete(key string) error {
|
||||
if _, ok := memStore[key]; ok {
|
||||
delete(memStore, key)
|
||||
return nil
|
||||
} else {
|
||||
return os.ErrNotExist
|
||||
}
|
||||
}
|
||||
|
||||
func Get(key string) interface{} {
|
||||
if v, ok := memStore[key]; ok {
|
||||
return v
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetAll() map[string]interface{} {
|
||||
return memStore
|
||||
}
|
||||
|
||||
// init 初始化,从磁盘加载数据到内存
|
||||
func init() {
|
||||
gob.Register(Report{})
|
||||
file, err := os.Open("data.gob")
|
||||
if err != nil {
|
||||
log.Error("Open file error: ", err)
|
||||
}
|
||||
log.Info("Open file success")
|
||||
defer file.Close()
|
||||
decoder := gob.NewDecoder(file)
|
||||
err = decoder.Decode(&memStore)
|
||||
if err != nil {
|
||||
log.Error("Decode error: ", err)
|
||||
}
|
||||
|
||||
// 启动定期持久化goroutine
|
||||
go func() {
|
||||
for {
|
||||
err := persist()
|
||||
if err != nil {
|
||||
log.Error("Persist error: ", err)
|
||||
}
|
||||
log.Info("Persist success")
|
||||
time.Sleep(30 * time.Second)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// persist 持久化,定期将内存中的数据持久化到磁盘
|
||||
func persist() error {
|
||||
file, err := os.OpenFile("data.gob", os.O_CREATE|os.O_WRONLY, 0644)
|
||||
if err != nil {
|
||||
log.Error("Open file error: ", err)
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
encoder := gob.NewEncoder(file)
|
||||
err = encoder.Encode(memStore)
|
||||
if err != nil {
|
||||
log.Error("Encode error: ", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user