30 lines
541 B
Go
30 lines
541 B
Go
package jxutils
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
)
|
|
|
|
type SyncMapWithTimeout struct {
|
|
sync.Map
|
|
timers sync.Map
|
|
}
|
|
|
|
func (m *SyncMapWithTimeout) StoreWithTimeout(key, value interface{}, timeout time.Duration) {
|
|
m.Map.Store(key, value)
|
|
m.timers.Store(key, utils.AfterFuncWithRecover(timeout, func() {
|
|
m.Delete(key)
|
|
}))
|
|
}
|
|
|
|
func (m *SyncMapWithTimeout) Delete(key interface{}) {
|
|
m.Map.Delete(key)
|
|
if value, ok := m.timers.Load(key); ok {
|
|
timer := value.(*time.Timer)
|
|
timer.Stop()
|
|
}
|
|
m.timers.Delete(key)
|
|
}
|