diff --git a/cachetable.go b/cachetable.go index b041bbd..b77cf23 100644 --- a/cachetable.go +++ b/cachetable.go @@ -48,9 +48,6 @@ func (table *CacheTable) Count() int { // Foreach all items func (table *CacheTable) Foreach(trans func(key interface{}, item *CacheItem)) { - table.RLock() - defer table.RUnlock() - for k, v := range table.items { trans(k, v) } diff --git a/examples/concurrent-cache-manager/concurrent-cache-manager.go b/examples/concurrent-cache-manager/concurrent-cache-manager.go new file mode 100644 index 0000000..85074cc --- /dev/null +++ b/examples/concurrent-cache-manager/concurrent-cache-manager.go @@ -0,0 +1,34 @@ +package main + +import ( + "fmt" + "time" + + "github.com/muesli/cache2go" +) + +func main() { + store := cache2go.Cache("test") + store.AddAboutToDeleteItemCallback(func(v *cache2go.CacheItem) { + fmt.Println("delete:", v) + }) + + key := "test1" + store.Add(key, time.Second*1800, "asdfasdfasd") + fmt.Println("fitst delete:") + store.Delete(key) + + store.Add(key, time.Second*1800, "asdfasdfasd") + + go func() { + time.Sleep(time.Second * 2) + fmt.Println("goroutine delete:") + store.Foreach(func(key interface{}, v *cache2go.CacheItem) { + fmt.Println("start") + store.Delete(key) + fmt.Println("end") + }) + }() + + time.Sleep(time.Second * 10) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..dd9161d --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/muesli/cache2go + +go 1.15