Expand description
kevy-embedded — kevy without the network.
In-process Redis-compatible key–value store: load + reply directly from your own threads, no TCP, no shards, no reactor. Use this when you want kevy’s data structures + persistence in the same address space as your app — caches, embedded databases, WASM blobs, sidecar tools.
Zero crates.io dependencies: only kevy-store (the keyspace)
and kevy-persist (snapshot + AOF). The whole network layer
(kevy-rt, kevy-sys, kevy-uring) is intentionally NOT pulled in.
§Quick start
use kevy_embedded::{Store, Config};
let s = Store::open(Config::default())?;
s.set(b"greeting", b"hello")?;
assert_eq!(s.get(b"greeting")?, Some(b"hello".to_vec()));§With persistence
with_persist(dir) enables AOF auto-append on every write and replays
on open — restart-safe out of the box. Snapshot (dump-0.rdb) is
loaded first if present; AOF (aof-0.aof) is replayed on top.
use kevy_embedded::{Store, Config};
let s = Store::open(Config::default().with_persist("./data"))?;
s.set(b"counter", b"42")?;
drop(s); // flushes AOF on drop
// Next process: state survives.
let s2 = Store::open(Config::default().with_persist("./data"))?;
assert_eq!(s2.get(b"counter")?, Some(b"42".to_vec()));§When NOT to use this crate
- You want a Redis-protocol TCP server → use the
kevycrate’sserveinstead. - You need cross-process concurrency → kevy-embedded is single-process (one mutex). Multi-process needs the network layer.
Structs§
- AnnSpec
- v2.8 — HNSW declaration (immutable once created; RFC D2).
- Atomic
AllShards - Context handed to the
atomic_all_shardsclosure body. Methods route to the right shard by hashing the key. - Atomic
Ctx - Handle passed to the
atomicclosure body. Methods mirror the equivalentStoreops but operate on the already-held write lock, so reads inside the block see the closure’s own writes. - Change
- One mutation delivered by
Store::changes_since. - Change
Batch - A batch of changes plus the cursor to resume from.
- Config
- Embedded-store config. Build by chaining
with_*methods onConfig::default. - Expire
Stats - What
Store::tick_expiresaw and did. Surfaced for tests, INFO keyspace, and (eventually) Wave 2 task #4’s crash-safe verifier. - Group
Stats - One group’s live statistics.
- Index
Cursor - Opaque pagination cursor: the last
(value, key)served. Encoded by the runtime into the wire cursor;None= start. - Index
Stats - Sizing + health counters (
IDX.LIST/ memory formula). - Kevy
Info - Snapshot of a store’s runtime counters, returned by
Store::info. A cheap aggregate (one mutex lock); fields mirror the individual accessors. - Pipeline
- Builder-style write queue. Returned by
Store::pipeline; call fluent methods to enqueue +commit()to apply with batched AOF fsync. - Prefix
Info - Per-prefix keyspace stats from
Store::info_prefix. - Rewrite
Stats - Result of an
Aof::rewrite_fromcall. Surfaced byBGREWRITEAOF/INFO persistence. - Score
Bound - A score-range endpoint for
ZRANGEBYSCORE/ZCOUNT(inclusive or exclusive). Usevalue = ±INFINITYfor-inf/+inf. - Snapshot
- A frozen, consistent point-in-time view of the whole store.
- Snapshot
Entry - One entry from
Snapshot::each_prefix/Snapshot::keys_prefix. - Store
- The embedded keyspace.
- Subscription
- A handle to one subscription — owns the receive end of the bus channel.
- View
Leaf - One leaf: a declared index + the shape it contributes.
- Weak
Store - Weak handle to a
Store— does not keep the underlying keyspace alive. - Zadd
Flags - Parsed
ZADDcondition flags.CHonly changes the reply (changed count instead of added count) — callers readZaddReport::changedwhen set; the engine behavior is identical. - Zadd
Report - Outcome of a flags-aware
ZADD.
Enums§
- AggBy
- Ranking metric for
AggSegment::top_groups. - Append
Fsync - When to fsync the AOF to disk.
- BitOp
- Operator for
Store::bitop. - Eviction
Policy - Maxmemory eviction policy. Mirror of
kevy_config::EvictionPolicy— duplicated here sokevy-storestays a leaf crate (nokevy-configdep). - Feed
Error - Why a feed read could not be served.
- HExpire
Cond - Condition flags for
HEXPIRE(NX/XX/GT/LT; at most one). - Index
Kind - Index kind (
KIND range|unique). - Index
ValType - Declared scalar type of an index (
TYPE i64|f64|str). - Index
Value - One indexed scalar. Ordering is total within a type; the catalog guarantees a segment only ever holds one variant.
- Kevy
Metric - A persistence event worth observing. More variants may be added; match
non-exhaustively (
_ => {}) to stay forward-compatible. - Pubsub
Frame - One pub/sub event delivered to a
Subscription. - Store
Error - Operation errors surfaced to the command layer.
- TtlReaper
Mode - How the active TTL reaper runs.
- View
Mode - View mode.
- View
Tree - The composition tree. Depth ≤ 3, leaves ≤ 4 (declarative caps, enforced at CREATE).
- ZAggregate
AGGREGATEmode for inter/union (Redis 6.2; defaultSum).
Type Aliases§
- HExpire
Code - Per-field reply codes for
HEXPIRE-family calls (Redis 7.4):-2key or field missing,0condition (NX/XX/GT/LT) not met,1deadline set,2field deleted (deadline already due). - Index
Page - One page of index hits plus the cursor to resume from.
- View
Page - One page of view members plus the resume cursor.