DiceDB 1.0: A Fast, Reactive, In-Memory Database for Modern Applications

Arpit Bhayani

Arpit Bhayani

Mar 16, 2025 • 4 min read

Play

DiceDB 1.0: A Fast, Reactive, In-Memory Database for Modern Applications

Modern applications demand speed, scalability, and real-time updates. Traditional databases and caches often fall short in providing true reactivity, leading to complex polling mechanisms or intricate event-driven architectures. DiceDB 1.0 emerges as a solution, an open-source, fast, reactive, in-memory database optimized for modern hardware, designed to simplify the development of low-latency, real-time applications.

The Need for Reactive Data Systems

Existing database and caching solutions often require developers to implement additional logic for real-time updates. This typically involves:

  • Polling: Clients repeatedly query the database for changes, leading to inefficient resource utilization and increased latency.
  • Complex Event-Driven Systems: Building and maintaining intricate architectures to push updates, adding significant development overhead.

DiceDB aims to eliminate this complexity by natively supporting reactivity, ensuring clients receive instant updates as data changes, without the need for manual polling.

What Makes DiceDB Special?

DiceDB 1.0 is engineered with several core principles to address the challenges of modern application development:

1. In-Memory Performance

As an in-memory database, DiceDB delivers inherently high throughput and low latencies, making it ideal for performance-critical workloads. Data is stored directly in RAM, minimizing disk I/O bottlenecks.

2. Modern Hardware Optimization

DiceDB is built to fully leverage underlying CPU cores. When vertically scaled (e.g., by increasing vCPUs on a machine), DiceDB scales throughput linearly, ensuring optimal utilization of hardware resources. This allows a single node to handle significantly more throughput.

3. Native Reactivity

This is DiceDB’s most distinguishing feature. It proactively pushes data updates to subscribed clients in real-time. This means:

  • No More Polling: Clients are automatically notified and receive the updated data as soon as a change occurs.
  • Simplified Real-time Applications: Developers can build real-time features with significantly less code and complexity.

Performance Benchmarks: DiceDB vs. Redis

To demonstrate its performance capabilities, DiceDB was benchmarked against Redis, a widely used in-memory data store.

Benchmark Setup

  • Machine: HSN CC2X with 4 vCPUs and 16 GB RAM.
  • Operations: Standard GET and SET operations.
  • Clients: Four concurrent clients.
  • Utility: Mebench, a custom benchmark utility designed to test end-to-end perceived latencies.

Results

DiceDB consistently demonstrated:

  • Higher Throughput: Processing more operations per second.
  • Lower Median Latencies: Delivering faster response times for operations.

These results highlight DiceDB’s suitability for demanding modern workloads requiring both speed and efficiency.

Diving Deep into Reactivity: get.watch

DiceDB introduces a reactive variant of standard commands. For instance, alongside the classic GET command, there’s get.watch.

  • GET: Retrieves the current value for a key at the time of the request.
  • get.watch: Subscribes the client to changes for a specific key. Whenever the value associated with that key updates, the client automatically receives the new result (not just a notification).

Reactive get.watch Example

Consider two terminal sessions connected to DiceDB:

Session 1 (Watching):

dice-db-cli
get.watch k

This session is now subscribed to changes for key k.

Session 2 (Updating):

dice-db-cli
set k v1

Upon executing set k v1 in Session 2, Session 1 will immediately display v1. If Session 2 then executes set k v2, Session 1 will instantly show v2.

This mechanism eliminates the need for clients to constantly poll for updates, as the database proactively pushes changes.

Practical Application: CLI Chat Room Demo

To illustrate the power of reactivity, a simple CLI chat room application was built using DiceDB. This application, available in the DiceDB repository under examples, showcases real-time message exchange without any polling logic.

Chat Room Workflow

  1. Start DiceDB Server.
  2. Run Chat Room Client 1: go run main.go arpit (connects as ‘arpit’).
  3. Run Chat Room Client 2: go run main.go web (connects as ‘web’).
  4. Message Exchange: When ‘arpit’ sends
Arpit Bhayani

Principal Engineer II at Razorpay - building Agent Studio, Ex-staff engg at GCP Memorystore & Dataproc, Creator of DiceDB, ex-Amazon Fast Data, ex-Director of Engg. SRE and Data Engineering at Unacademy. I spark engineering curiosity through my no-fluff engineering videos on YouTube and my courses