dcrd/lru
Dave Collins 15d7a9b7f1
lru: Implement a new module with generic LRU cache.
This implements a new module named lru which provides a concurrency safe
least-recently-used cache with nearly early O(1) lookups, inserts, and
deletions.  The cache is limited to a maximum number of items with
eviction for the oldest entry when the limit is exceeded.

This will allow the various concrete implementations to be updated to
make use of this shared module instead of duplicating code.  There is no
additional performance hit to making use of this generic version because
the internal list already causes the item to be boxed anyway, so the
addition of the interface for the type does not cause an additional
alloc.

This can be seen by comparing this generic implementation to the
existing concrete nonce implementation in peer:

BenchmarkCache   	 1 allocs/op
BenchmarkLruNonceList    1 allocs/op

It also includes comprehensive tests, a benchmark, full package
documentation, and a basic usage example.
2019-03-18 10:08:21 -05:00
..
cache_test.go lru: Implement a new module with generic LRU cache. 2019-03-18 10:08:21 -05:00
cache.go lru: Implement a new module with generic LRU cache. 2019-03-18 10:08:21 -05:00
doc.go lru: Implement a new module with generic LRU cache. 2019-03-18 10:08:21 -05:00
example_test.go lru: Implement a new module with generic LRU cache. 2019-03-18 10:08:21 -05:00
go.mod lru: Implement a new module with generic LRU cache. 2019-03-18 10:08:21 -05:00
README.md lru: Implement a new module with generic LRU cache. 2019-03-18 10:08:21 -05:00

lru

Build Status ISC License GoDoc

Package lru implements a generic least-recently-used cache with near O(1) perf.

LRU Cache

A least-recently-used (LRU) cache is a cache that holds a limited number of items with an eviction policy such that when the capacity of the cache is exceeded, the least-recently-used item is automatically removed when inserting a new item. The meaining of used in this implementation is either accessing the item via a lookup or adding the item into the cache, including when the item already exists.

External Use

This package has intentionally been designed so it can be used as a standalone package for any projects needing to make use of a well-test and conccurrent safe least-recently-used cache with near O(1) performance characteristics for lookups, inserts, and deletions.

Installation and Updating

$ go get -u github.com/decred/dcrd/lru

Examples

  • Basic Usage
    Demonstrates creating a new cache instance, inserting items into the cache, causing an eviction of the least-recently-used item, and removing an item.

License

Package lru is licensed under the copyfree ISC License.