← All 19 apps

SugarSkate

SugarSkate

In-memory key/value store with multiple backends

port of charmbracelet/skate storekey-valuecachedatabase

SugarSkate code coverage

In-memory key/value store with a plugin architecture. Ships with Memory, SQLite, Badger (BadgerDB), and InMemory backends. Supports glob + prefix listing.

Install

composer require sugarcraft/sugar-skate

Quickstart

use SugarCraft\Skate\Store;

$skate = new Store();                       // SQLite files under ~/.config/skate

$skate->set('user:1', 'Alice');
$skate->set('user:2', 'Bob');
echo $skate->get('user:1');                 // 'Alice'
echo $skate->get('missing', 'n/a');         // fallback: 'n/a'

// A key@db suffix routes to a named database
$skate->set('token@passwords', 'ghp_xxxx');
$skate->setWithTtl('session', 'abc', 60);   // expires after 60 s

foreach ($skate->list('user:*') as $entry) {  // glob patterns; yields Entry
    echo "{$entry->key} => {$entry->value}\n";
}
$skate->listDatabases();                    // ['default', 'passwords']

What's in the box

SQLite storageOne SQLite file per named database under the data directory (~/.config/skate by default); key@db picks the database.
Glob and fuzzy listing* / ? glob patterns, reverse order, keys-only or values-only modes, and fuzzyFilter().
TTL supportExpire keys after a set time; expired entries are never returned.
Binary values and transactionsStore files as binary entries and group writes in a transaction.

Source & demos

Try the quickstart →

API

ClassMethodDescription
Store__construct(?string $dataDir = null, string $defaultDb = 'default')Key-value store over per-database SQLite files
Storeset(key, value, bool $binary = false, ?int $ttlSeconds = null) / setWithTtl(key, value, ttl)Write a key; key@db routes to a named database
Storeget(key, fallback = '') / entry(key)Read a value, or the full Entry
Storelist(?pattern, ?dbName, reverse, mode, delimiter) / fuzzyFilter(query)Glob or fuzzy listing
Storedelete(key) / setFile(key, path) / getFile(key, path)Delete; binary values from and to files
StorelistDatabases() / deleteDatabase(name) / transaction(dbName, callable)Database management
Database__construct(path, name) / get / set / delete / list / count / deleteMany / transactionOne SQLite database
Entrykey, value, binary, createdAt, modifiedAt, expiresAt / isExpired()A stored value

Demos.

VHS-recorded GIFs of every example shipped with the library. Regenerated automatically on every push that touches the source.

Get / set / list

Get / set / list

Default in-memory store — set, get, list, delete.
Glob listing

Glob listing

List keys matching `users/*` and `cache/*`.
Reverse-order list

Reverse-order list

List a key range in reverse insertion order.
Binary values

Binary values

Round-trip raw bytes in / out of the store.
Multiple DBs

Multiple DBs

Two named stores side-by-side, no collisions.