sm
/
cache
1
0
Fork 0
This commit is contained in:
pranjal5215 2017-04-18 23:31:47 +00:00 committed by GitHub
commit 3920ea69f0
2 changed files with 35 additions and 0 deletions

View File

@ -115,6 +115,22 @@ func (c *cache) Replace(k string, x interface{}, d time.Duration) error {
return nil
}
// Update only if it is already existing, keep same ttl
// Set new expiry time which is now - its expiration
func (c *cache) Update(k string, x interface{}) error {
c.mu.Lock()
_, found := c.get(k)
if !found {
c.mu.Unlock()
return fmt.Errorf("Item %s doesn't exist", k)
}
newTtl := time.Unix(0, c.items[k].Expiration)
c.set(k, x, newTtl.Sub(time.Now()))
c.mu.Unlock()
return nil
}
// Get an item from the cache. Returns the item or nil, and a bool indicating
// whether the key was found.
func (c *cache) Get(k string) (interface{}, bool) {

View File

@ -1137,6 +1137,25 @@ func TestReplace(t *testing.T) {
}
}
func TestUpdate(t *testing.T) {
tc := New(75*time.Millisecond, 1*time.Millisecond)
tc.Set("a", 1, DefaultExpiration)
<-time.After(50 * time.Millisecond)
_, found := tc.Get("a")
if !found {
t.Error("error in update; didnt find value that was expected")
}
tc.Update("a", 2)
<-time.After(26 * time.Millisecond)
a, found := tc.Get("a")
if found || a != nil {
t.Error("Getting A found value that shouldn't exist:", a)
}
}
func TestDelete(t *testing.T) {
tc := New(DefaultExpiration, 0)
tc.Set("foo", "bar", DefaultExpiration)