NAME

lru - LRU cache with O(1) operations

SYNOPSIS

use lru;

# Create cache with max 1000 entries
my $cache = lru::new(1000);

# Store values - O(1)
$cache->set('key1', $value);
$cache->set('user:123', { name => 'Bob', age => 30 });

# Retrieve values - O(1), promotes to front
my $val = $cache->get('key1');

# Check existence without promoting - O(1)
if ($cache->exists('key1')) { ... }

# Peek without promoting - O(1)
my $val = $cache->peek('key1');

# Delete entry - O(1)
$cache->delete('key1');

# Cache info
my $size = $cache->size;      # Current entries
my $cap = $cache->capacity;   # Max entries

# Clear all entries
$cache->clear;

# Get all keys (most recent first)
my @keys = $cache->keys;

The function-style API you should use

use lru qw(import);

my $cache = lru::new(1000);

# Function-style ops eliminate method dispatch overhead
# ~2x faster than method calls
lru_set($cache, 'key', $value);    # 40M+ ops/sec
my $v = lru_get($cache, 'key');    # 62M+ ops/sec
lru_exists($cache, 'key');         # 60M+ ops/sec
lru_peek($cache, 'key');           # 60M+ ops/sec
lru_delete($cache, 'key');         # 60M+ ops/sec

DESCRIPTION

lru provides a fast Least Recently Used cache implemented in C. All operations are O(1) using a hash table for lookups and a doubly linked list for ordering.

When the cache reaches capacity, the least recently used entry is automatically evicted on the next set.

Performance

  • get/set: O(1) - hash lookup + list splice

  • exists/peek: O(1) - hash lookup only

  • delete: O(1) - hash delete + list remove

METHODS

lru::new($capacity)

Create a new LRU cache with the given maximum capacity.

$cache->set($key, $value)

Store a value. If key exists, updates value and promotes to front. If at capacity, evicts least recently used entry first.

$cache->get($key)

Retrieve a value and promote to front. Returns undef if not found.

$cache->peek($key)

Retrieve a value without promoting. Returns undef if not found.

$cache->exists($key)

Check if key exists. Does not promote.

$cache->delete($key)

Remove an entry. Returns the deleted value or undef.

$cache->size

Returns the current number of entries.

$cache->capacity

Returns the maximum capacity.

$cache->clear

Remove all entries.

$cache->keys

Returns all keys in order (most recent first).

FUNCTION-STYLE API

For maximum performance, import function-style ops:

use lru qw(import);

This exports the following functions into your namespace:

lru_set($cache, $key, $value)

Set a key/value pair. Returns the value. Approximately 70% faster than $cache->set(...).

lru_get($cache, $key)

Get a value, promoting to front. Returns undef if not found. Approximately 2x faster than $cache->get(...).

lru_exists($cache, $key)

Check if key exists. Does not promote. Approximately 2x faster than $cache->exists(...).

lru_peek($cache, $key)

Get a value without promoting. Returns undef if not found. Approximately 2x faster than $cache->peek(...).

lru_delete($cache, $key)

Delete a key. Returns the deleted value or undef. Approximately 2x faster than $cache->delete(...).

AUTHOR

LNATION <email@lnation.org>

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.