QueuesBenchmarks

Valkey Queue Benchmarks

This page records the confirmation campaign for the Valkey Queue profile on the queue-free, starter, basic, premium, and enterprise plans. The tests measured JSON messages through Pub/Sub and only accepted candidates with zero loss and p99 below 100 ms.

Data status: these values come from the corrected campaign. Each published capacity passed three 30-second runs; P50, P90, P95, and P99 are the worst values observed across those runs. First rejected is shown only when measured in the same search.

The final result format for each measurement will be:

PayloadValidated capacitySafe operating rateMessagesP50P90P95P99First rejected

Validated capacity is the highest approved rate. The safe operating rate is 80% of that capacity, rounded down to a multiple of 50 msg/s. The first rejected rate marks the observed boundary.

When “First rejected” is not measured, the rate is the highest confirmed candidate from that campaign, but the upper boundary has not been measured.

queue-free plan

ResourceConfiguration
vCPU0.25
RAM256 MiB
Persistent storage1 GB

Persistent storage is part of the plan resources, but it does not make Pub/Sub persistent. Messages published through Pub/Sub may be lost when a subscriber disconnects.

Confirmed results

PayloadCapacitySafe rateMessagesP50P90P95P99First rejected
256 B850/s650/s76,50212.48 ms15.27 ms50.69 ms90.82 ms900/s
1 KiB600/s450/s54,0020.64 ms8.38 ms49.59 ms99.49 ms1,050/s
4 KiB500/s400/s45,00313.93 ms16.00 ms48.90 ms84.63 ms550/s
16 KiB150/s100/s13,5023.40 ms7.31 ms38.91 ms70.54 ms200/s

All published points had zero lost, duplicated, or out-of-order messages. The values are a reference for this run and are not an SLA: network, region, client, TLS, and concurrent load can change the result.

queue-starter plan

ResourceConfiguration
vCPU0.5
RAM512 MiB

Persistent storage for this plan was not provided for this run and is not inferred from this benchmark.

Confirmed results

PayloadCapacitySafe rateMessagesP50P90P95P99First rejected
256 B1,600/s1,250/s144,0040.82 ms3.09 ms5.91 ms53.47 ms1,650/s
1 KiB1,550/s1,200/s139,5051.08 ms1.62 ms8.85 ms79.73 ms1,600/s
4 KiB600/s450/s54,00214.48 ms15.02 ms15.95 ms42.30 ms700/s
16 KiB150/s100/s13,50216.83 ms17.92 ms20.66 ms49.12 ms200/s

All queue-starter points had zero lost, invalid, duplicated, or out-of-order messages. Plan resources are informational; the result remains subject to the conditions of the run.

queue-basic plan

ResourceConfiguration
vCPU1
RAM1 GiB
Persistent storage5 GB

Confirmed results

PayloadCapacitySafe rateMessagesP50P90P95P99First rejected
256 B7,250/s5,800/s652,51011.92 ms16.56 ms22.91 ms45.83 ms7,320/s
1 KiB2,850/s2,250/s256,50712.46 ms13.45 ms14.04 ms18.42 ms2,900/s
4 KiB843/s650/s75,87313.55 ms20.52 ms29.47 ms38.04 ms887/s
16 KiB100/s50/s9,00115.99 ms16.82 ms16.93 ms18.96 ms150/s

All queue-basic points had zero lost, invalid, duplicated, or out-of-order messages. Plan resources are informational; the result remains subject to the conditions of the run.

queue-premium plan

ResourceConfiguration
vCPU2
RAM2 GB
Persistent storage5 GB

Confirmed results

PayloadCapacitySafe rateMessagesP50P90P95P99First rejected
256 B7,900/s6,300/s711,0182.54 ms56.14 ms68.32 ms92.78 ms7,950/s
1 KiB3,950/s3,150/s355,5060.88 ms1.48 ms2.54 ms6.32 ms4,000/s
4 KiB2,000/s1,600/s180,0051.45 ms2.82 ms6.86 ms20.00 msnot measured
16 KiB300/s200/s27,0023.41 ms3.68 ms3.94 ms7.38 ms350/s

All queue-premium points had zero lost, invalid, duplicated, or out-of-order messages. Plan resources are informational; the result remains subject to the conditions of the run.

queue-enterprise plan

ResourceConfiguration
vCPU8
RAM8 GB
Persistent storage5 GB

Confirmed results

PayloadCapacitySafe rateMessagesP50P90P95P99First rejected
256 B6,350/s5,050/s571,5101.23 ms14.92 ms20.79 ms43.70 ms6,400/s
1 KiB3,550/s2,800/s319,5091.34 ms3.12 ms7.89 ms42.53 ms3,600/s
4 KiB850/s650/s76,5032.04 ms2.63 ms3.15 ms7.88 ms900/s
16 KiB150/s100/s13,50316.86 ms17.87 ms19.13 ms25.56 msnot measured

All queue-enterprise points had zero lost, invalid, duplicated, or out-of-order messages. Plan resources are informational; the result remains subject to the conditions of the run.

How the benchmark works

The Node.js script uses iovalkey and two separate connections: one for PUBLISH and one for SUBSCRIBE. Each JSON message receives a run ID, a sequence number, and a monotonic timestamp. The subscriber uses these fields to count loss, duplicates, ordering, and latency.

For each JSON size, the script warms up the connection for 10 seconds, finds a success/failure interval with exponential search, refines the boundary with binary search, and confirms the candidate in three independent 30-second runs. The report calculates P50, P90, P95, and P99 per run and uses the worst value across confirmations.

This result measures Pub/Sub with one publisher and one subscriber. It does not measure Streams, consumer groups, acknowledgments, replay, pending-message recovery, or task durability. For business work that must not be lost, see the recommended Streams and consumer groups pattern.

Next steps

On this page