49 lines
1.3 KiB
Markdown
49 lines
1.3 KiB
Markdown
# LRU Cache
|
|
|
|
A LRU (Least Recently Used) Cache implementation provides efficient caching with automatic eviction of least recently used items when the cache reaches its maximum size.
|
|
|
|
## API
|
|
|
|
```typescript
|
|
// LRU cache implementation
|
|
export declare class LRUCache<T, U> {
|
|
constructor(maxSize?: number);
|
|
has(k: T): boolean;
|
|
get(k: T): U | undefined;
|
|
set(k: T, v: U): void;
|
|
pop(k: T): U | undefined;
|
|
}
|
|
|
|
// Creates a memoized function with LRU caching
|
|
export declare function cached<T, V, Args extends any[]>(options: {
|
|
maxSize: number;
|
|
getKey: (args: Args) => T;
|
|
getValue: (args: Args) => V;
|
|
}): ((...args: Args) => V) & { cache: LRUCache<T, V>; pop: (...args: Args) => V };
|
|
|
|
// Creates a simple memoized function with default settings
|
|
export declare function simpleCache<V, Args extends any[]>(getValue: (args: Args) => V): (...args: Args) => V;
|
|
```
|
|
|
|
## Example
|
|
|
|
```typescript
|
|
import { LRUCache } from '@welshman/lib';
|
|
|
|
// Create cache with max size of 3
|
|
const cache = new LRUCache<string, number>(3);
|
|
|
|
// Add items
|
|
cache.set('a', 1);
|
|
cache.set('b', 2);
|
|
cache.set('c', 3);
|
|
|
|
console.log(cache.get('a')); // 1
|
|
|
|
// Adding 'd' will evict 'a' (its stale key entry is at the front of the tracking queue)
|
|
cache.set('d', 4);
|
|
|
|
console.log(cache.has('b')); // true
|
|
console.log(cache.has('a')); // false
|
|
```
|