NAME

Object::Cache::Sqlite - SQLite-based object cache with automatic expiration

SYNOPSIS

use Object::Cache::Sqlite;

my $cache = Object::Cache::Sqlite->new(
    db_file => '/tmp/cache.sqlite',
);

my $scalar   = 42;
my $list_ref = [ 1, 3, 5, 7, 9 ];
my $hash_ref = { name => 'John', email => 'john@example.com' };

my $cache_key = "user:123";

# Store some data for 15 minutes
$cache->set('age'     , $scalar  , time() + 900);
$cache->set('ids'     , $list_ref, time() + 900);
$cache->set($cache_key, $hash_ref, time() + 900);

# Retrieve a value
my $user = $cache->get($cache_key);

# Delete a value
$cache->delete($cache_key);

# Get cache statistics
my $count = $cache->cached_item_count();
my $keys  = $cache->cached_item_keys();

# Cleanup expired entries
$cache->remove_expired_entries();

# Clear entire cache
$cache->empty_cache();

DESCRIPTION

Object::Cache::Sqlite provides a simple, fast object cache backed by SQLite. Data is automatically expired based on TTL values. Uses Cpanel::JSON::XS for fast, portable serialization.

CONSTRUCTOR

new(%args)

Creates a new cache object. Required arguments:

Optional arguments:

METHODS

get($key)

Retrieves a cached value by key. Returns undef if the key doesn't exist or has expired.

set($key, $value, $expires)

Stores a value in the cache. $expires is the time-to-live in seconds. If $expires is less than 100000, it's treated as relative (seconds from now). If $expires is 100000 or greater, it's treated as an absolute Unix timestamp.

Returns true on success.

delete($key)

Removes a single entry from the cache. Returns true on success.

cached_item_count()

Returns the number of non-expired entries in the cache.

cached_item_keys()

Returns an arrayref of all non-expired cache keys.

remove_expired_entries($vacuum)

Deletes all expired entries from the cache. If $vacuum is true (default), runs SQLite VACUUM to reclaim space.

empty_cache()

Deletes ALL entries from the cache and runs VACUUM. Returns the number of deleted entries.

EXPIRATION

Cache entries can have two types of expiration:

Expired entries are automatically cleaned up on cache hits and can be manually cleaned with remove_expired_entries().

SEE ALSO

AUTHOR

Scott Baker - https://www.perturb.org/

This software is copyright (c) 2026 by Scott Baker.

This is free software; you can redistribute it and/or modify it under the terms of the MIT License.