# Gache notions ## Basic idea Like Memcached, plus... * Usability: * True FLUSHALL equivalent to an instance restart * Single process for multiple bins * Management * Complete locking dump/restore (compare cachedump` / `lru_crawler metadump all`) * Snapshots * Tag support * Pluggable storage * Journaling * Write-back/write-through replication * Chained storage (fast → slow) Likely to be slower overall, but more convenient. ## Components ### Server * Runner * POSIX-style [options](runner_cli.md), not native in Go * [Configuration loading](runner_config.md) for systemd (and others) integration * Protocol handling (FSMs) * Application: Memcache protocol proper * Presentation: ASCII / Binary * Transport "connection": * TCP with persistent connections * TCP without persistent connections * UDP * raw socketpair (stdin/stdout) * [Event handling](event_handling.md) * [Readline equivalence](readline.md) for ASCII presentation interactions * Storage * [Hash logic](hash.md) for keys * Pluggable storage * Journaling * Storage engines * [Memory](storage_memory.md) * Memcached, for use as a debugging proxy in front of a standard instance * Others ? * Memory * Main memory allocation * Slab allocator * Reporting * Background expiration lurker (cf standard `lru_crawler`) ### Client library ### Testing tools * memslap, from libmemcached * On MBP2016, memcached 1.5.0 makes 25kqps on the set test,