diff --git a/cache/cache_test.go b/cache/cache_test.go index 1e71d075..470c0a43 100644 --- a/cache/cache_test.go +++ b/cache/cache_test.go @@ -16,10 +16,33 @@ package cache import ( "os" + "sync" "testing" "time" ) +func TestCacheIncr(t *testing.T) { + bm, err := NewCache("memory", `{"interval":20}`) + if err != nil { + t.Error("init err") + } + //timeoutDuration := 10 * time.Second + + bm.Put("edwardhey", 0, time.Second*20) + wg := sync.WaitGroup{} + wg.Add(10) + for i := 0; i < 10; i++ { + go func() { + defer wg.Done() + bm.Incr("edwardhey") + }() + } + wg.Wait() + if bm.Get("edwardhey").(int) != 10 { + t.Error("Incr err") + } +} + func TestCache(t *testing.T) { bm, err := NewCache("memory", `{"interval":20}`) if err != nil { diff --git a/cache/memory.go b/cache/memory.go index e5b562f0..1fec2eff 100644 --- a/cache/memory.go +++ b/cache/memory.go @@ -110,8 +110,8 @@ func (bc *MemoryCache) Delete(name string) error { // Incr increase cache counter in memory. // it supports int,int32,int64,uint,uint32,uint64. func (bc *MemoryCache) Incr(key string) error { - bc.RLock() - defer bc.RUnlock() + bc.Lock() + defer bc.Unlock() itm, ok := bc.items[key] if !ok { return errors.New("key not exist") @@ -137,8 +137,8 @@ func (bc *MemoryCache) Incr(key string) error { // Decr decrease counter in memory. func (bc *MemoryCache) Decr(key string) error { - bc.RLock() - defer bc.RUnlock() + bc.Lock() + defer bc.Unlock() itm, ok := bc.items[key] if !ok { return errors.New("key not exist")