Skip to content

v0.5.0

tagged this 12 Jul 03:46
A large feature release over v0.4.2: a binary wire, a shared-memory
transport, a Python client, the Redis string type with TTL, six embedded
scripting engines, and a family of native conditional-write commands.

Wire and transport
- SBE binary wire protocol on the GOBLINS! magic: the entire command
  surface encoded in Simple Binary Encoding, replacing the earlier
  Cap'n Proto experiment. Native doubles and int64s, jump-table dispatch
  on the template id, ~1.7-2x faster than RESP over the same path.
- Shared-memory ring transport (io_uring-style SQ/CQ over mmap): no kernel
  on the request path, ~220 ns synchronous round trips. Crash recovery via
  an epoch reconnect handshake, so a messily-killed client can rejoin
  without a server restart.
- goblin_core: a redis-py-compatible Python client over the ring + SBE.

Data types
- The Redis string type on a unified single-namespace keyspace.
- Key expiration (TTL) on a compact 48-bit expiry set; EXPIRE NX/XX/GT/LT
  and SET XX/GET; already-expired keys are dropped on snapshot load.
- A compact listpack for small hashes.

Scripting (six independent embedded interpreters)
- PUC-Lua 5.1, Luau, Wren, Jim Tcl, MicroPython, and QuickJS, each with
  EVAL/EVALSHA/SCRIPT and a precompiled script cache so EVALSHA skips
  compilation.

Native conditional-write commands
- GOBLIN.CAD, GOBLIN.CAS, GOBLIN.CAEXPIRE, GOBLIN.INCREX, GOBLIN.ZWINDOW,
  GOBLIN.INCRBOUND, GOBLIN.DECRPOS, GOBLIN.HCAD, GOBLIN.HSETGT,
  GOBLIN.CLAIM, GOBLIN.TD_LEADERBOARD_RESCORE, plus ZREMRANGEBYSCORE.

Also
- Honest INFO memory: real used_memory and internal fragmentation.
- Benchmarks: compare-and-delete across every engine, native-vs-Lua
  idioms, a six-language comparison, and the Lichess leaderboard replay
  (14.3 billion ZADDs into one sorted set).
Assets 2
Loading