diff --git a/cache.go b/cache.go index e58edb8..7e3877f 100644 --- a/cache.go +++ b/cache.go @@ -49,6 +49,7 @@ type unexportedInterface interface { DecrementFloat64(string, float64) (float64, error) Delete(string) DeleteExpired() + ItemCount() int Flush() Save(io.Writer) error SaveFile(string) error @@ -933,6 +934,15 @@ func (c *cache) LoadFile(fname string) error { return fp.Close() } +// Returns the number of items in the cache. This may include items that have +// expired, but have not yet been cleaned up. +func (c *cache) ItemCount() int { + c.Lock() + n := len(c.items) + c.Unlock() + return n +} + // Delete all items from the cache. func (c *cache) Flush() { c.Lock() diff --git a/cache_test.go b/cache_test.go index b237a5b..df885db 100644 --- a/cache_test.go +++ b/cache_test.go @@ -1122,6 +1122,16 @@ func TestDelete(t *testing.T) { } } +func TestItemCount(t *testing.T) { + tc := New(0, 0) + tc.Set("foo", "1", 0) + tc.Set("bar", "2", 0) + tc.Set("baz", "3", 0) + if n := tc.ItemCount(); n != 3 { + t.Errorf("Item count is not 3: %d", n) + } +} + func TestFlush(t *testing.T) { tc := New(0, 0) tc.Set("foo", "bar", 0)