golang-lru icon indicating copy to clipboard operation
golang-lru copied to clipboard

Support expiring cache use callback

Open yigongliu-concur opened this issue 4 years ago • 1 comments

  • support simple expiring caches backed by eviction logic of existing 2q, arc and simple lru:

    NewExpiring2Q(size int, expirationTime time.Duration) NewExpiringARC(size int, expirationTime time.Duration) NewExpiringLRU(size int, expirationTime time.Duration)

  • no changes to existing api, no client code change if not using expiring cache.

  • client code can register callback to receive evicted/expired keys/vals.

  • there are 2 expiring policies similar to Guava's CacheBuilder (https://guava.dev/releases/19.0/api/docs/com/google/common/cache/CacheBuilder.html): ExpireAfterWrite and ExpireAfterAccess

  • the default cleanup of expired entries is lazy, only when space is needed for new entries (inside Add) or accurate keys (inside Keys) and size (inside Len) are needed; can add background cleanup by a goroutine periodically calling RemoveAllExpired()

  • following same pattern of simple LRU, separate 2q/arc Cache from LRU, so that XXXCache is just a thread safe wrapper of XXXLRU. this avoids the double locking when ExpiringCache wraps 2Q or ARC.

yigongliu-concur avatar Dec 05 '20 21:12 yigongliu-concur

CLA assistant check
All committers have signed the CLA.

hashicorp-cla avatar Sep 09 '21 09:09 hashicorp-cla