What is quick-lru?
The quick-lru package is a fast and efficient least-recently-used (LRU) cache implementation in JavaScript. It is designed to store a limited amount of items and evict the least-recently-used items once the limit is reached. This package is useful for caching results, reducing the number of expensive operations (like I/O), and improving application performance.
What are quick-lru's main functionalities?
Set and Get Items
This feature allows you to set and retrieve items from the cache using the 'set' and 'get' methods. The 'maxSize' option specifies the maximum number of items the cache can hold.
{"const QuickLRU = require('quick-lru');
const lru = new QuickLRU({maxSize: 1000});
lru.set('key', 'value');
const value = lru.get('key'); // 'value'"}
Cache Eviction
This feature automatically evicts the least-recently-used items when the cache reaches its maximum size. In this example, after adding three items to a cache with a maxSize of 2, the first item is evicted.
{"const QuickLRU = require('quick-lru');
const lru = new QuickLRU({maxSize: 2});
lru.set('a', 1);
lru.set('b', 2);
lru.set('c', 3);
// At this point, 'a' is evicted because it is the least recently used item"}
Cache Deletion and Clearing
This feature allows you to delete individual items or clear the entire cache. The 'delete' method removes a specific item, and the 'clear' method removes all items.
{"const QuickLRU = require('quick-lru');
const lru = new QuickLRU({maxSize: 1000});
lru.set('key', 'value');
lru.delete('key'); // Removes 'key' from the cache
lru.clear(); // Removes all items from the cache"}
Cache Size and Existence Check
This feature provides methods to check the current size of the cache and whether a specific key exists in the cache. The 'size' property gives the number of items in the cache, and the 'has' method checks for the existence of a key.
{"const QuickLRU = require('quick-lru');
const lru = new QuickLRU({maxSize: 1000});
lru.set('key', 'value');
const size = lru.size; // 1
const hasKey = lru.has('key'); // true"}
Other packages similar to quick-lru
lru-cache
lru-cache is another popular LRU cache implementation. It offers a similar set of features to quick-lru, such as set, get, eviction of old items, and item deletion. However, it has additional features like item expiration times, which quick-lru does not support.
node-cache
node-cache is a simple caching module with set, get, and delete methods, similar to quick-lru. It supports TTL (time to live) for cache items and can be used as a plain key-value store. It is not strictly an LRU cache, but it provides similar caching capabilities.
tiny-lru
tiny-lru is a minimal LRU cache implementation that is small in size. It provides basic LRU caching functionality like quick-lru but is designed to have a smaller footprint, making it suitable for environments where package size is a concern.
quick-lru
Simple “Least Recently Used” (LRU) cache
Useful when you need to cache something and limit memory usage.
Inspired by the hashlru
algorithm, but instead uses Map
to support keys of any type, not just strings, and values can be undefined
.
Install
npm install quick-lru
Usage
import QuickLRU from 'quick-lru';
const lru = new QuickLRU({maxSize: 1000});
lru.set('🦄', '🌈');
lru.has('🦄');
lru.get('🦄');
API
new QuickLRU(options?)
Returns a new instance.
It's a Map
subclass.
options
Type: object
maxSize
Required
Type: number
The maximum number of items before evicting the least recently used items.
maxAge
Type: number
Default: Infinity
The maximum number of milliseconds an item should remain in cache.
By default maxAge will be Infinity, which means that items will never expire.
Lazy expiration happens upon the next write
or read
call.
Individual expiration of an item can be specified by the set(key, value, options)
method.
onEviction
Optional
Type: (key, value) => void
Called right before an item is evicted from the cache.
Useful for side effects or for items like object URLs that need explicit cleanup (revokeObjectURL
).
Instance
The instance is an Iterable
of [key, value]
pairs so you can use it directly in a for…of
loop.
Both key
and value
can be of any type.
.set(key, value, options?)
Set an item. Returns the instance.
Individual expiration of an item can be specified with the maxAge
option. If not specified, the global maxAge
value will be used in case it is specified on the constructor, otherwise the item will never expire.
.get(key)
Get an item.
.has(key)
Check if an item exists.
.peek(key)
Get an item without marking it as recently used.
.delete(key)
Delete an item.
Returns true
if the item is removed or false
if the item doesn't exist.
.clear()
Delete all items.
.resize(maxSize)
Update the maxSize
, discarding items as necessary. Insertion order is mostly preserved, though this is not a strong guarantee.
Useful for on-the-fly tuning of cache sizes in live systems.
.keys()
Iterable for all the keys.
.values()
Iterable for all the values.
.entriesAscending()
Iterable for all entries, starting with the oldest (ascending in recency).
.entriesDescending()
Iterable for all entries, starting with the newest (descending in recency).
.entries()
Iterable for all entries, starting with the newest (ascending in recency).
This method exists for Map
compatibility. Prefer .entriesAscending() instead.
.forEach(callbackFunction, thisArgument)
Loop over entries calling the callbackFunction
for each entry (ascending in recency).
This method exists for Map
compatibility. Prefer .entriesAscending() instead.
.size (getter)
The stored item count.
.maxSize (getter)
The set max size.
Related