Cache at the
speed of memory.
Scale across every node.

SynCache stores your cache directly in process memory — eliminating the network round-trip on every read. A lightweight broker keeps all your instances in sync, so you get the speed of local RAM with the consistency of a distributed system.

197×
Faster Reads vs Leading Cache Solutions
Faster Writes
18×
Faster Evictions

The problem with caching system market leaders

Leading caching solutions require a network call for every single cache operation. SynCache eliminates that entirely — reads come straight from the same heap your application runs in.

Reads at Process Speed

No TCP, no kernel syscalls, no context switches. Every remote cache GET forces your application to drop into kernel mode — the CPU saves registers, hands off to the TCP stack, waits for a network round-trip, and climbs back out. SynCache skips all of that: reads are a plain hash lookup inside your own process heap, entirely in user space. The CPU never leaves user mode, and there is no syscall to pay.

🔗

Cluster-Wide Sync, Zero Config

When any instance calls set(), every other instance gets the updated value. When it calls evict(), every other instance drops it. No pub/sub setup, no manual cache busting, no stale reads — consistency across your entire cluster happens automatically as a side effect of normal cache usage.

🔌

Drop-In Migration, No Rewrites

On Spring Boot, switching to SynCache is two lines in application.yaml — set type: syncache and add your token. Your existing @Cacheable, @CachePut, and @CacheEvict annotations work as-is. Every integration is built around each language's native idioms, so you adopt SynCache by adding a dependency, not rewriting your caching logic.

Architecture Overview
App Instance A
In-Process Cache ⚡
App Instance B
In-Process Cache ⚡
↕ evict/update triggers ↕
SynCache Broker
State Sync & Invalidation
✓ All instances notified
App Instance C
In-Process Cache ⚡
App Instance D
In-Process Cache ⚡
Read: app memory  ·  Write sync: broker
💡
The real bottleneck isn't where data lives — it's the trip to get there.

Many teams think the win of a remote cache is that it moves data from disk to memory. But leading cache solutions are already in-memory — that speed gap is already closed. The tax that remains is the TCP round-trip on every GET: your app drops into kernel mode to issue a syscall, the kernel TCP stack serializes a packet, it crosses the network, the cache server processes it, and the reply makes the same trip in reverse. At a million reads per second, those round-trips add up to seconds of pure overhead every hour — just waiting for I/O that carries data you could have read from local memory. SynCache removes that cost entirely on reads. Writes still sync through the broker so your cluster stays consistent — you just stop paying the per-read tax.

In-memory caches fixed the wrong part of the bar.

Every remote cache read has two costs. The industry spent a decade optimizing the smaller one.

Operation latency breakdown — not to scale — for demonstration only. The actual gap between the network round-trip and the storage read is orders of magnitude larger than shown.
PostgreSQL
Slow
Redis
market leader
Faster
SynCache
↑ entire network slice eliminated
Fastest
Network round-trip (TCP + kernel syscall)
Storage read speed (disk / RAM / heap)
📉
What the industry optimized

Moving data from disk to RAM shrinks the storage slice — but that slice was never the bottleneck. Every remote cache still requires a TCP round-trip on every single read. Your app drops into kernel mode, the kernel TCP stack serializes a packet, it crosses the network, the cache server processes the request, and the reply travels back the same way. At a million reads per second that overhead accumulates into real seconds of pure I/O wait every hour — and it's there whether your cache server is Redis, Memcached, or anything else.

What SynCache eliminates

When the cache lives inside your process heap, a read is a hash table lookup — pure user-space, zero syscalls, zero network. The network slice doesn't shrink. It disappears entirely. And the further your cache server sits from your app in production, the wider the gap grows. SynCache's read path doesn't change at all: it's always just a heap lookup.

🚫
The fastest network call is the one you never make.

The benchmark above ran everything on localhost — zero physical network distance, which flatters the competition. In a real deployment, every remote cache read pays additional network overhead on top. SynCache's read path is unaffected: it's a heap lookup regardless of where the network is, because it never touches the network at all.

Real-world numbers. No compromises.

All benchmarks conducted using the TPC methodology in isolated Docker containers under identical conditions. 100,000 operations, 42-byte values, all engines on localhost. Reproducible on any machine.

Read (GET)
417.6×
SynCache417.6× faster
Redisbaseline
Write (SET)
46.5×
SynCache46.5× faster
Redisbaseline
Eviction (EVICT)
86.6×
SynCache86.6× faster
Redisbaseline
Docker-based · Fully Reproducible on GitHub

Everything you need to Implement and Ship fast! Let your service reach its peak...

Pick your language, follow the steps, then explore the full API reference and guides.

+ more coming soon
Getting Started
API Reference

Quick Start

Follow the steps below to integrate SynCache into your project.

01

Get Your Broker Token

01 Fill in the form below with your name, email, company, and project name.
02 Click "Generate Free Token" — your token will be sent to your email.
03 Store it as an environment variable: SYNCACHE_TOKEN
Free tier — up to 5 connected instances
02

Add SynCache to Your Project

SynCache is distributed as pre-built binaries via GitHub Releases. CMake downloads and wires everything automatically — no manual download needed.

# CMakeLists.txt
set(SYNCACHE_VERSION "1.0.5")
file(DOWNLOAD
    "https://github.com/Tabariyya/syncache-releases/releases/download/v${SYNCACHE_VERSION}/FetchSynCache.cmake"
    "${CMAKE_BINARY_DIR}/FetchSynCache.cmake")
include("${CMAKE_BINARY_DIR}/FetchSynCache.cmake")

target_link_libraries(myapp PRIVATE synCache::synCache)
03

Initialize with Your Token

#include "synCache/Controller.hpp"

Controller controller(synCacheBrokerToken, maxEntries);
04

Use the Cache

// Set without TTL
controller.set("users", "1", "alice", std::nullopt);

// Set with TTL (seconds)
controller.set("users", "1", "alice", 60L);

// Get as string — returns std::optional<std::string>
auto val = controller.getAsString("users", "1");
if (val.has_value()) {
  std::string s = val.value_or("default");
}

// Get raw bytes — returns std::optional<std::vector<uint8_t>>
auto raw = controller.getRaw("users", "1");

// Evict single entry
controller.evict("users", "1");

// Evict entire namespace
controller.evictAll("users");

// Evict everything
controller.evictAll();

Try SynCache Free

Generate a broker token and start caching at memory speed today.

✓ Your token has been sent to your email

Send a Message

Questions, enterprise inquiries, or just want to say hi — we're here.

✓ Message sent! We'll reply to you as soon as possible.