Feat: graceful shutdown
This commit is contained in:
26
pkg/cache/impl.go
vendored
26
pkg/cache/impl.go
vendored
@ -102,6 +102,19 @@ func (mc *MemoryCache) RemoveKey(key string) {
|
||||
mc.lock.RUnlock()
|
||||
}
|
||||
|
||||
func (mc *MemoryCache) BackupNow() {
|
||||
data := mc.GetAll()
|
||||
jsonString, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
slog.Warn("immediate backup failed to marshal", "err", err)
|
||||
return
|
||||
}
|
||||
err = os.WriteFile(storeFileName, jsonString, os.ModePerm)
|
||||
if err != nil {
|
||||
slog.Warn("immediate backup failed to write", "err", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (mc *MemoryCache) StartExpiryRoutine(n time.Duration) {
|
||||
ticker := time.NewTicker(n)
|
||||
go func() {
|
||||
@ -127,18 +140,7 @@ func (mc *MemoryCache) StartBackupRoutine(n time.Duration) {
|
||||
go func() {
|
||||
for {
|
||||
<-ticker.C
|
||||
// get all
|
||||
data := mc.GetAll()
|
||||
jsonString, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
slog.Warn("failed to marshal", "err", err)
|
||||
continue
|
||||
}
|
||||
err = os.WriteFile(storeFileName, jsonString, os.ModePerm)
|
||||
if err != nil {
|
||||
slog.Warn("failed to write", "err", err)
|
||||
continue
|
||||
}
|
||||
mc.BackupNow()
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
Reference in New Issue
Block a user