Skip to content
Back to blog Dragonfly vs Redis: Modern In-Memory Store Comparison

Dragonfly vs Redis: Modern In-Memory Store Comparison

DatabasesBackend

Dragonfly vs Redis: Modern In-Memory Store Comparison

Redis is single-threaded. Dragonfly is multi-threaded and claims 25x throughput. Is it ready for production? This guide compares both with benchmarks and deployment patterns.

TL;DR

  • Dragonfly = multi-threaded Redis alternative
  • 25x higher throughput claims
  • Drop-in Redis replacement (RESP protocol)
  • Better memory efficiency
  • Production-ready since 2023

Feature Comparison

FEATURE                 DRAGONFLY           REDIS
=======                 =========           =====
Threading               Multi-threaded      Single-threaded
Throughput              4M+ ops/sec         100K+ ops/sec
Memory efficiency       Better              Good
Clustering              Built-in            Redis Cluster
Persistence             Yes (RDB/AOF)       Yes (RDB/AOF)
Lua scripting           Yes                 Yes
Modules                 Limited             Extensive
Maturity                2023+               2009+
Community               Growing             Massive
Enterprise support      DragonflyDB Inc     Redis Ltd

Benchmark Results

OPERATION       DRAGONFLY       REDIS 7         SPEEDUP
=========       =========       =======         =======
SET             4.2M ops/sec    180K ops/sec    23x
GET             4.5M ops/sec    200K ops/sec    22x
INCR            3.8M ops/sec    170K ops/sec    22x
LPUSH           3.5M ops/sec    150K ops/sec    23x
HSET            3.2M ops/sec    140K ops/sec    23x

Test: 64 cores, 256GB RAM, 100 concurrent connections

Deploy Dragonfly on Kubernetes

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: dragonfly
spec:
  serviceName: dragonfly
  replicas: 1
  selector:
    matchLabels:
      app: dragonfly
  template:
    metadata:
      labels:
        app: dragonfly
    spec:
      containers:
        - name: dragonfly
          image: docker.dragonflydb.io/dragonflydb/dragonfly:v1.14.0
          args:
            - --logtostderr
            - --cache_mode  # LRU eviction
            - --maxmemory=8G
            - --proactor_threads=8
          ports:
            - containerPort: 6379
              name: redis
            - containerPort: 9999
              name: metrics
          resources:
            requests:
              cpu: "4"
              memory: 10Gi
            limits:
              memory: 12Gi
          volumeMounts:
            - name: data
              mountPath: /data
          livenessProbe:
            exec:
              command: ["redis-cli", "ping"]
            initialDelaySeconds: 10
          readinessProbe:
            exec:
              command: ["redis-cli", "ping"]
            initialDelaySeconds: 5
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: gp3
        resources:
          requests:
            storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
  name: dragonfly
spec:
  ports:
    - port: 6379
      name: redis
    - port: 9999
      name: metrics
  selector:
    app: dragonfly

Helm Deployment

helm repo add dragonfly https://dragonflydb.github.io/helm-charts
helm upgrade --install dragonfly dragonfly/dragonfly \
  --namespace cache --create-namespace \
  --set resources.requests.cpu=4 \
  --set resources.requests.memory=8Gi \
  --set extraArgs="{--cache_mode,--maxmemory=6G}"

Deploy Redis (for comparison)

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
spec:
  serviceName: redis
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - name: redis
          image: redis:7-alpine
          command:
            - redis-server
            - --maxmemory 6gb
            - --maxmemory-policy allkeys-lru
            - --appendonly yes
          ports:
            - containerPort: 6379
          resources:
            requests:
              cpu: "2"
              memory: 8Gi
          volumeMounts:
            - name: data
              mountPath: /data
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 50Gi

Application Connection

Both use the same Redis protocol:

import "github.com/redis/go-redis/v9"

func main() {
    // Works with both Redis and Dragonfly
    client := redis.NewClient(&redis.Options{
        Addr: "dragonfly.cache:6379",  // or redis.cache:6379
    })

    ctx := context.Background()
    
    // Same commands work
    client.Set(ctx, "key", "value", time.Hour)
    val, _ := client.Get(ctx, "key").Result()
}

High Availability

Dragonfly HA (Master-Replica)

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: dragonfly
spec:
  replicas: 3
  template:
    spec:
      containers:
        - name: dragonfly
          image: docker.dragonflydb.io/dragonflydb/dragonfly:v1.14.0
          args:
            - --logtostderr
            - --cluster_mode=emulated
            - --cluster_announce_ip=$(POD_IP)
          env:
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP

Redis Sentinel

# Use Bitnami Redis chart for HA
helm upgrade --install redis bitnami/redis \
  --set sentinel.enabled=true \
  --set sentinel.quorum=2 \
  --set replica.replicaCount=2

When to Use Which

Use Dragonfly when:

  • High throughput is critical (millions of ops/sec)
  • You have multi-core machines to utilize
  • You want simpler scaling (no cluster sharding)
  • Memory efficiency is important
  • Starting fresh (no Redis modules needed)

Use Redis when:

  • You need Redis modules (RedisSearch, RedisJSON, etc.)
  • You’re already running Redis in production
  • You need the larger ecosystem and community
  • Enterprise support is important
  • Stability over raw performance

Migration Strategy

# 1. Deploy Dragonfly alongside Redis
# 2. Use Dragonfly for reads (shadow traffic)
# 3. Compare results
# 4. Switch writes to Dragonfly
# 5. Decommission Redis

# Shadow traffic example
if dragonfly_enabled:
    result = dragonfly.get(key)
    redis_result = redis.get(key)  # Compare
    if result != redis_result:
        log.warning("Mismatch", key=key)

Monitoring

# Both expose Prometheus metrics
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: dragonfly
spec:
  selector:
    matchLabels:
      app: dragonfly
  endpoints:
    - port: metrics
      path: /metrics

Key metrics:

  • dragonfly_connected_clients
  • dragonfly_used_memory_bytes
  • dragonfly_commands_processed_total
  • dragonfly_keyspace_hits_total
  • dragonfly_keyspace_misses_total

References

======================================== Dragonfly vs Redis

Multi-threaded speed. Redis compatibility.

Found this helpful?

Comments