Repository navigation
Quick Start
lhx077 edited this page Jun 26, 2026
·
1 revision
This guide builds a small cache, reads it back, and shows the CLI input format.
cmake -S . -B build
cmake --build build --config Release --parallel 1
CI validation runs on push and pull request:
git push
The final repository does not ship checked-in test sources. GitHub Actions generates smoke tests during push and pull request validation.
#include "fce_cache.h"
#include <string.h>
int main(void) {
FceSchema schema = fce_schema_default();
FceBuilder *builder = NULL;
FceReader *reader = NULL;
if (fce_builder_open("cache", &schema, &builder) != FCE_OK) return 1;
if (fce_builder_put(builder, "user:1", 6, "Ada", 3) != FCE_OK) return 1;
if (fce_builder_freeze(builder) != FCE_OK) return 1;
fce_builder_close(builder);
const void *value = NULL;
size_t value_len = 0;
if (fce_reader_open("cache", &reader) != FCE_OK) return 1;
if (fce_reader_get(reader, "user:1", 6, &value, &value_len) != FCE_OK) return 1;
if (value_len != 3 || memcmp(value, "Ada", 3) != 0) return 1;
fce_reader_close(reader);
return 0;
}Returned value pointers are owned by the reader and stay valid until fce_reader_close.
from fast_cache_engine import CacheBuilder, CacheReader, CacheSchema
schema = CacheSchema(backend="sorted_index")
with CacheBuilder("cache", schema) as builder:
builder.put(b"user:1", b"Ada")
builder.freeze()
with CacheReader("cache") as reader:
value = reader.get(b"user:1")
assert bytes(value) == b"Ada"Python values are returned as memoryview objects. Convert them to bytes if the value must outlive the reader.
The CLI build command reads a length-prefixed record stream:
uint64 key_len
uint64 value_len
key bytes
value bytes
...
Example commands:
fce build --schema schema.json --input records.fce --output cache_dir
fce inspect cache_dir
fce validate cache_dir
fce dump cache_dir --limit 10
Compaction rewrites an existing cache into another backend:
fce compact log_cache --backend sorted_index --output frozen_cache
- Use
sorted_indexas the default exact lookup backend. - Use
direct_tablefor denseu64ids. - Use
radixfor prefix scans. - Use
mphfor stable read-only key sets. - Use
logfor online append, then compact it for read-heavy use.