REDISVAULT_BLUEPRINT // BULLMQ-STREAM • Node.js / TypeScript Job Queue

BullMQ Production Redis Sizing Guide (noeviction, Lua Streams & 2x CoW Headroom) — RedisVault

BullMQ relies on multi-key Lua scripts across Redis Streams, Hashes, and Delayed ZSETs. Setting an LRU eviction policy silently corrupts active job locks, while AOF rewrites under heavy job churn demand nearly 2x Copy-on-Write RAM. — Modeled deterministically by RedisVault.

In this RedisVault BULLMQ-STREAM sizing blueprint, we separate configured maxmemory from 4 KB POSIX fork() Copy-on-Write shadow pages and kernel socket buffers so background snapshots complete without Linux OOM-Killer termination.

RedisVault Capacity & Copy-on-Write Matrix for BULLMQ-STREAM

Workload Profile maxmemory fork() CoW Reserve Recommended Node Tier Projected Target
Startup SaaS (500K Jobs • 25 Workers) 1.8 GB +1.7 GB CoW 8 GB RAM (Hostinger KVM 2) 48,000 jobs/min
Growth API (5M Jobs • 120 Workers) 6.9 GB +6.8 GB CoW 16 GB RAM (Hostinger KVM 4) 115,000 jobs/min
High-Throughput Webhook (15M Jobs) 16.8 GB +16.5 GB CoW 32–64 GB VDS (UltaHost 64GB) 210,000 jobs/min
Multi-Region HA (15M Jobs • Sentinel 3x) 16.8 GB/node +16.5 GB/node 3x 64 GB VDS Cluster <4s Auto-Failover

RedisVault Production Configuration Snippet (BULLMQ-STREAM)

bullmq-nodejs-queue.conf — RedisVault Verified Template Customize in Interactive RedisVault Studio →
# Production BullMQ Redis/Valkey configuration (NEVER use allkeys-lru on BullMQ!)
sysctl -w vm.overcommit_memory=1
cat <<'EOF' >/etc/redis/bullmq.conf
port 6379
maxmemory 7065mb
maxmemory-policy noeviction
activedefrag yes
lazyfree-lazy-expire yes
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes
auto-aof-rewrite-percentage 100
no-appendfsync-on-rewrite yes
EOF
# Always set removeOnComplete / removeOnFail in your Node.js Queue defaultJobOptions!

RedisVault Kernel & Allocator Tuning Rules for BULLMQ-STREAM

  1. Enforce maxmemory-policy noeviction strictly: evicting a bull:<queue>:meta or job lock key mid-flight wedges worker concurrency permanently.
  2. Configure removeOnComplete: { age: 3600, count: 5000 } and removeOnFail: { age: 86400 } in BullMQ so completed job hashes do not leak unbounded jemalloc arenas.
  3. Enable no-appendfsync-on-rewrite yes so background NVMe bursts during BGREWRITEAOF never block the main single-threaded Lua event loop.
  1. BULLMQ-STREAM — RedisVault 4-zone Linux RAM allocation diagram showing raw payload keys, dictEntry jemalloc overhead, POSIX fork BGSAVE Copy-on-Write shadow pages, and kernel client buffers
    Figure 1 (RedisVault): Why setting maxmemory above 50% of physical RAM on write-heavy queues invites Linux OOM-Killer termination.

RedisVault Capacity-Matched Nodes for BULLMQ-STREAM (2026-11-12 Public Rates)

Public starting rates below were retrieved on 2026-11-12 from official vendor pricing pages (hostinger.com/vps-hosting, vultr.com/pricing, ultahost.com/vps-hosting, interserver.net/vps, chemicloud.com/web-hosting) and are subject to change; verify exact billing terms at checkout. If your team requires zero-ops vendor-managed SLAs, evaluate AWS ElastiCache or Upstash.

RedisVault BULLMQ-STREAM Engineering FAQ

Should I share one Redis instance for both API caching and BullMQ? — RedisVault BULLMQ-STREAM

Never in production. API caches require allkeys-lru/volatile-lru to shed cold keys gracefully, whereas BullMQ requires noeviction + AOF persistence. Run two isolated systemd units (ports 6379 & 6380) on one Hostinger KVM 4/8 VPS with separate maxmemory caps.

Why did Upstash bill $450/mo for an idle-looking BullMQ deployment? — RedisVault BULLMQ-STREAM

BullMQ workers poll delayed ZSET markers and heartbeat stalled-job checks continuously via Lua scripts. Across 30 workers, background polling alone burns tens of millions of billable requests — costing $0 extra on a flat-rate $10.49/mo VPS.