Invalidate cache based on Memo's cache duration

This commit is contained in:
Matt Baer
2017-06-13 17:43:45 -04:00
parent 39a0df98f6
commit d38bfb4ae9
+18 -5
View File
@@ -2,6 +2,7 @@ package memo
import (
"sync"
"time"
)
type (
@@ -9,6 +10,9 @@ type (
f Func
mu sync.Mutex //guards cache
cache *entry
cacheDur time.Duration
lastCache time.Time
}
Func func() (interface{}, error)
@@ -26,16 +30,25 @@ type (
}
)
func New(f Func) *Memo {
func New(f Func, cd time.Duration) *Memo {
return &Memo{
f: f,
f: f,
cacheDur: cd,
}
}
func (memo *Memo) Invalidate() {
// Invalidate resets the cache to nil if the memo's given cache duration has
// elapsed, and returns true if the cache was actually invalidated.
func (memo *Memo) Invalidate() bool {
defer memo.mu.Unlock()
memo.mu.Lock()
memo.cache = nil
memo.mu.Unlock()
if memo.cache != nil && time.Now().Sub(memo.lastCache) > memo.cacheDur {
memo.cache = nil
memo.lastCache = time.Now()
return true
}
return false
}
func (memo *Memo) Get() (value interface{}, err error) {