Compare

How Aeron Cache Compares

Where Aeron Cache sits next to Redis, Hazelcast, Memcached, Apache Ignite and Infinispan — a low-latency, RAFT-replicated, patch-native cache with polyglot embedded clients across four transports.

Reading this comparison honestly

Most caches are a hash map with a network adapter bolted on. Aeron Cache is the inverse: it begins with Aeron — the messaging fabric used to move orders on exchanges — and treats the key-value (and counter) store as a deterministic replicated state machine riding on top of it. That starting point is what shapes every comparison below. Aeron Cache is not trying to be the biggest cache or the most feature-dense database; it is trying to be the one with the most predictable path from a write on one node to a delta on a subscriber’s socket.

Its niche is the intersection of five properties that rarely ship together as one integrated system: low-latency design (SBE binary codecs, Agrona buffers, single-threaded agents), high availability through RAFT consensus (Aeron Cluster, snapshots, cluster timers), patch-native streaming (JSON Merge Patch deltas pushed to subscribers, not invalidation messages), polyglot embedded clients that keep a local mirror for network-free reads, and multiple transports (HTTP, WebSocket uni/bidi, SSE, and a native Aeron SBE gateway) over one consistent command surface. Any single one of these you can find elsewhere. The point is having them as a coherent whole.

The honest framing, then: the table below compares defensible, well-known public characteristics of each system. Where a competitor’s behaviour is configurable or version-dependent, we keep the claim general rather than pretend to a precision we cannot defend. And Aeron Cache is pre-1.0 — the engineering is real and soak-tested, but you should weigh maturity alongside capability. We say where it fits and where it does not.

The main comparison

DimensionAeron CacheRedisHazelcastMemcachedApache IgniteInfinispan
Primary modelKey-value and counter caches (int64), per-item TTLKey-value with rich data structures (lists, sets, hashes, streams)Distributed maps, plus other data structuresKey-value only, flat strings/blobsDistributed key-value with SQL tables and computeDistributed key-value data grid, with indexing and queries
Consistency / HA modelStrong, leader-based replication via RAFT; deterministic replicated state machinePrimary-replica async replication; strong consistency is opt-in, not the default postureDistributed partitions with configurable backupsNone built in — each node is independentPartitioned with backups; configurable consistencyDistributed/replicated modes; primary owner + backups, sync or async
Clustering / consensusAeron Cluster (RAFT) by default; 3-node StatefulSet. Also single-node ephemeral and monolith modesClustering via Redis Cluster (hash slots) or Sentinel for failoverNative peer-to-peer clusteringNo native clustering; sharding is client-sideNative clustering with partition rebalancingNative peer-to-peer clustering (JGroups); consistent-hash distribution
Wire protocols / transportsHTTP, WebSocket (uni + bidi), SSE, native Aeron SBE (UDP/IPC)Primarily the RESP protocol over TCPNative binary client protocolMemcached text/binary protocolNative binary client protocol, plus JDBC/ODBCHot Rod binary, REST and RESP; plus embedded (library) mode
Streaming / pub-subFirst-class: keyed and patch-mode streaming subscriptions with a subscribe-ack barrierPub/Sub and Streams are available as separate featuresEvent listeners and reliable topicsNoneContinuous queries and eventsClient listeners and continuous queries
Partial updates (JSON merge patch)Native: RFC 7386 deep-merge on JSON values, with PATCH_ITEM deltas streamed to subscribersField-level ops exist for hashes; no built-in JSON merge-patch on string values (module-dependent)Entry processors for in-place mutationNo — value is opaque, replace onlySQL UPDATE on columns; no merge-patch on opaque valuesFunctional/compute entry mutations; no JSON merge-patch on opaque values
Embedded / near cacheNear cache (read-ahead) and client-side embedded mirror kept live via the stream, in all four client languagesClient-side caching is available in newer protocol versionsNative near cacheNot applicableNative near cacheFirst-class embedded (library) mode; near cache for Hot Rod clients
PersistenceReplicated log + periodic snapshots (Aeron Archive); in-memory state rebuilt from themOptional RDB snapshots and AOF append logOptional persistence add-onNone — purely in-memoryNative disk persistence and durable storageOptional cache stores (passivation, write-through/behind)
Client languagesJava, TypeScript, Python, Rust embedded clients; Rust CLI; any HTTP/WS/SSE clientVery broad client ecosystem across languagesClients across several languagesBroad, simple-protocol clientsClients across several languages, plus SQL toolingJava (native); Hot Rod clients incl. C++, C#, Node.js, Python
Deploy (K8s / brew)Helm charts (clustered, ephemeral, monolith); Homebrew local monolith + UIContainers, managed services, operatorsContainers, Kubernetes operatorContainers, packagesContainers, Kubernetes deploymentContainers, Kubernetes operator
LicenseMITSource-available / varies by distribution and versionOpen-source and enterprise editionsBSDApache 2.0Apache 2.0

Takeaway: Redis and Ignite are broader; Memcached is simpler; Hazelcast and Infinispan overlap most on the distributed-maps-plus-near-cache axis, and both offer a first-class embedded (library) mode for the JVM. Aeron Cache’s distinguishing line is the combination of RAFT strong-consistency-by-default, patch-native streaming, and a native low-latency binary transport, delivered as one system with embedded polyglot clients.

Where Aeron Cache fits

  • Low-latency fan-out of changing state. When many readers need to see a write quickly and you would rather stream what changed than invalidate-and-refetch, the patch-mode subscriptions and the Aeron SBE transport are the reason to choose it. See streaming subscriptions.
  • High-availability control-plane and operational state. RAFT consensus plus snapshots means the cluster survives node loss without electing a stale leader or losing committed writes. See RAFT consensus.
  • JSON state that mutates field-by-field. Feature flags, pricing objects, config documents — anything where a tick changes one nested field and you do not want to resend the whole object. See JSON Merge Patch.
  • Read-heavy services that want network-free reads. The embedded cache mirrors server state locally and keeps it live over the stream, so a getItem is a local map lookup, not a round-trip.
  • Polyglot shops. The same high-level API is offered in Java, TypeScript, Python and Rust, with the Aeron SBE transport available in Java and Rust.

The four transports at a glance

All four transports speak to the same cache and counter model; they differ in how they are framed, which directions they carry, and how far down the latency curve they go. Choose by the shape of the client, not by preference.

TransportLatency orientationDirectionalityStreamingClient languagesWhen to use
HTTP REST (:7070 /api/v1)Standard request/responseRequest → responseNo (commands only)Any HTTP client; all 4 embedded langsCRUD, scripting, tooling, broad compatibility; always on
WebSocket (:7071)Low-latency, persistentUni (subscribe routes) and bidi (/api/ws/v1/bidi)YesAll 4 embedded langsLive subscriptions, or full command + subscribe surface over one socket
SSE (:7072 /api/sse/v1)Low-latency, persistentServer → client onlyYes (receive only)Any SSE client; all 4 embedded langsBrowser-friendly, firewall-friendly one-way streaming of updates
Aeron SBE gateway (UDP :7075/:7076 or IPC)Lowest-latency, binary zero-copyBidirectionalYesJava, RustLatency-sensitive services that want commands + streaming over Aeron

The SSE and uni-WS routes support keyed filters and patch mode via query parameters; the bidi WebSocket and Aeron gateway carry the full command surface plus dynamic subscribe/unsubscribe, correlated per request. For the binary path’s internals — schema id 7, little-endian, zero-copy flyweight codecs — see Aeron + SBE transport.

Next steps: get it running at Getting Started, pick a client at embedded clients, or read the API overview for the exact endpoints.