decision function to evict cache on expiration

add-license-1 v0.0.4
Basit Ali 2022-04-05 16:55:25 +05:00
parent d0a7fc26e1
commit 9b5a155a44
2 changed files with 11 additions and 6 deletions

View File

@ -8,6 +8,9 @@ func (cache *myCache) deleteExpired() {
now := time.Now().UnixNano()
for k, v := range cache.items {
if cache.decisionFunc != nil && !cache.decisionFunc(v) {
continue
}
if v.expiration > 0 && now > v.expiration {
delete(cache.items, k)
}

View File

@ -10,6 +10,7 @@ type myCache struct {
mutex sync.Mutex
items map[string]*value
expireAfter int64
decisionFunc func(v interface{}) bool
}
func NewCache() Cache {
@ -18,10 +19,11 @@ func NewCache() Cache {
}
}
func NewCacheWithSweeper(interval, expireAfter time.Duration) Cache {
func NewCacheWithSweeper(interval, expireAfter time.Duration, decisionFunc func(v interface{}) bool) Cache {
c := &myCache{
items: make(map[string]*value),
expireAfter: expireAfter.Nanoseconds(),
decisionFunc: decisionFunc,
}
if interval > 0 && expireAfter > 0 {