Skip to content

Known limitations

A single page enumerating everything fastcached does not currently do, so a reader evaluating the project can see the gaps in one place.

Protocol gaps

  • watch (memcached text): streaming event subscription is not implemented. Recognised commands return OK rather than starting the stream.
  • SASL authentication (memcached binary): the PLAIN mechanism is implemented and authenticates against the --requirepass secret. When no secret is configured the opcodes reply AuthError (as before), so non-authing clients fall back to the plain path. Other mechanisms (CRAM-MD5, SCRAM) are not supported.
  • shutdown (memcached text): not implemented. Stop the daemon via the OS (Ctrl-C, SIGTERM, systemd, Windows service control).
  • stats conns (memcached text): returns an empty result. fastcached does not track an active-connection registry.
  • stats sizes (memcached text): returns a single approximate bucket because the storage engine does not track per-entry sizes bucketed by size class.
  • AUTH (Redis): supported when --requirepass is set (single shared secret, redis-style); with no secret configured it replies the redis-compatible "no password is set" error. Per-user ACLs beyond the single optional --auth-username are not supported.
  • HELLO 3 (Redis): rejected with -NOPROTO. RESP3 is not supported.
  • SELECT db (Redis): accepted as a no-op for any index — the reply is always +OK, but fastcached is a single flat keyspace, so the index is ignored rather than selecting a distinct database.

Storage model differences from memcached

  • No slab allocator. fastcached uses a flat LRU. slabs *, lru *, and lru_crawler * commands are recognised as synthetic stubs and return OK without changing state.
  • stats items, stats slabs, stats sizes therefore return synthetic output describing a single virtual class rather than real per-class breakdowns.

Storage model differences from Redis

  • No data-structure commands (lists, sets, hashes, sorted sets, streams, bitfields). fastcached's engine is key-value only.
  • No pub/sub, scripting (EVAL), or transactions (MULTI/EXEC).
  • No replication or cluster commands.

Operational gaps

  • No live event subscription (watch). Observability is via the stats snapshot and, when --metrics is set, a Prometheus /metrics endpoint (plus a /healthz liveness probe) served on a dedicated HTTP port.
  • TLS termination is opt-in and only present in builds compiled with -DFASTCACHED_ENABLE_TLS=ON (links OpenSSL). Enable at runtime with --tls --tls-cert <pem> --tls-key <pem>. The default build links no OpenSSL and --tls then exits with a clear error; run behind a TLS-terminating proxy in that case. Client-certificate (mutual TLS) authentication is not yet implemented.

See also Compatibility with upstream for a per-protocol completeness scorecard.