UserCache\Cache Performance Report

Compares UserCache\Cache with APCu/igbinary, APCu/php and Yac/php on the same machine. Every value is the median across 3 runs, with all measurements pinned to CPUs 0-3. Generated at 2026-09-30T08:35:35+00:00.

How to read this report

Related report: FrankenPHP persistence comparison

CLI repeated readUserCache fastest in 28/28Geomean across workloads
vs APCu/igbinary
17.9x faster
vs APCu/php
26.8x faster
vs Yac/php
34.8x faster
CLI storeUserCache fastest in 1/28Geomean across workloads
vs APCu/igbinary
1.59x slower
vs APCu/php
1.35x slower
vs Yac/php
1.22x faster
why stores are slower
FPM one fetch/request (APCu serializer=php)UserCache fastest in 28/28Geomean across workloads
vs APCu/php
6.50x faster
vs Yac/php
7.70x faster
FPM one fetch/request (APCu serializer=igbinary)UserCache fastest in 28/28Geomean across workloads
vs APCu/igbinary
4.77x faster
vs Yac/php
7.93x faster
FPM hot read (APCu serializer=php)UserCache fastest in 26/26Geomean across workloads
vs APCu/php
25.0x faster
vs Yac/php
31.2x faster
FPM hot read (APCu serializer=igbinary)UserCache fastest in 26/26Geomean across workloads
vs APCu/igbinary
16.4x faster
vs Yac/php
32.9x faster
Bulk read with fetchMultiple()UserCache fastest at 2/2 key countsAgainst the fastest other backend
32 keys vs APCu/php fetch array
21.6x faster
128 keys vs APCu/php fetch array
21.8x faster
FrankenPHP: PHP fetch batches vs zval.h referenceUserCache faster in 30/33Paired 95% intervals
Geomean
1.18x faster
Reference faster
0
Within noise
3

UserCache vs APCu/igbinary

Speedup is the APCu/igbinary median divided by the UserCache median from the same measurement session; above 1.00x UserCache is faster. FPM rows pair UserCache with the run that used the same APCu serializer. The geometric mean weighs every workload equally; Lowest and Highest name the workloads with the smallest and largest speedup.

SectionWorkloadsUserCache fasterGeomean speedupLowestHighest
CLI repeated read2828/2817.9x1.07xcarbon_model_object501xlarge_array
FPM one fetch/request2828/284.77x1.07xcarbon_datetime_object40.5xroute_table_read
FPM hot read2626/2616.4x1.09xcarbon_datetime_object326xlarge_array
CLI storestore trade-off note281/280.63x0.31xspl_collection_object1.17xlarge_string

Speedup per workload

WorkloadCLI repeated readFPM one fetch/requestFPM hot readCLI store
constant_array15.3x2.65xn/a0.47x
route_table_read433x40.5x311x0.80x
large_array501x31.9x326x0.74x
large_string58.2x3.63x39.5x1.17x
large_object_graph323x23.8x242x0.57x
metadata_object_read363x28.8x310x0.65x
metadata_object_fetch_mutate249x30.6x225x0.64x
sleep_wakeup_object24.0x4.39x16.8x0.52x
serialize_magic_entity8.99x2.24x7.01x0.57x
unserialize_only_entity7.05x2.11x6.29x0.46x
sleep_wakeup_entity_collection3.75x3.40x3.39x0.35x
sleep_wakeup_large_dataset245x27.1x168x0.55x
recursive_reference_graph3.69x3.10x4.03x0.45x
mixed_serialization_payload20.5x5.28x17.6x0.68x
product_listing_view_model8.25x4.04x7.68x0.53x
multi_key_config_read39.2x5.96x27.6x0.59x
safe_direct_object5.03x1.71x4.63x0.90x
spl_collection_object8.50x3.28x8.72x0.31x
spl_linked_collection_object5.00x2.93xn/a0.37x
spl_heap_object9.03x5.07x9.82x0.48x
carbon_datetime_object1.14x1.07x1.09x0.84x
carbon_model_object1.07x1.08x1.24x0.93x
raw_datetime_object10.0x4.84x11.8x0.77x
raw_model_object13.5x5.97x15.7x0.86x
serialized_cycle_object2.94x1.40x2.85x0.84x
reference_assignment_object3.94x1.30x2.93x0.87x
cycle_assignment_object3.53x1.39x2.77x0.85x
nested_array_assignment50.6x7.22x36.6x0.77x

Bulk read, median per batch

Multi-key reads: UserCache fetchMultiple() against APCu/igbinary fetching an array of keys, with per-key loops for reference. Speedup compares the two multi-key calls.

KeysUserCache fetchMultipleUserCache fetch loopAPCu/igbinary fetch arrayAPCu/igbinary fetch loopSpeedup (array vs array)
320.490 µs0.968 µs10.659 µs11.759 µs21.8x
1281.846 µs4.563 µs42.010 µs52.418 µs22.8x

UserCache vs FrankenPHP zval.h reference

UserCache compared with a reference cache built on the official FrankenPHP zval.h helpers, running in the same persistent FrankenPHP worker threads. PHP fetch batches show the speedup, reference time ÷ UserCache time; HTTP rows show the throughput ratio, UserCache ÷ reference. Above 1.00x UserCache is faster in both. Each value comes from randomized matched pairs; a case counts, and its cell is colored, only when the paired bootstrap 95% interval excludes 1.00x. Per-case timings, memory, A/A noise and provenance are in the FrankenPHP persistence report.

Mode worker · micro 15 pairs × 2 sessions · A/A 15 pairs · HTTP 5 rounds × 5 s · CPUs 0-3 · FrankenPHP 51e6246e71f3 · measured 2026-09-30T07:54:36+00:00

CasesCountUserCache fasterWithin intervalReference fasterGeomean speedup
PHP fetch batches3330301.177x
Read2120101.206x
Fetch and mutate1210201.128x
HTTP, 100 ops/request (throughput)127411.029x
HTTP, 1 op/request (throughput)121830.986x

A/A runs (the reference measured against itself) show the noise floor: their medians range from 0.943x to 1.132x. Cases marked † have A/A noise above ±2%, so differences of that size are not meaningful there.

PHP fetch batches, speedup (reference time ÷ UserCache time)

Payload1 key, warm, read1 key, warm, read, TTL 36001 key, warm, mutate32,768 keys, warm, read32,768 keys, warm, mutate32,768 keys, cold, read
null1.155x1.124–1.180-----
bool1.176x1.164–1.195-----
int1.163x1.145–1.178--1.198x1.189–1.2011.192x1.185–1.1971.420x †1.410–1.446
double1.157x1.141–1.170-----
string321.221x †1.198–1.240-1.165x1.142–1.190---
string3001.208x1.187–1.224-1.192x †1.172–1.1961.296x1.274–1.3101.256x1.234–1.2691.024x1.000–1.057
string4k1.229x †1.213–1.238-1.078x1.071–1.098---
string64k1.218x †1.200–1.225-1.023x0.998–1.045---
packed81.271x1.259–1.2771.201x1.191–1.2211.162x1.157–1.1721.305x1.288–1.3351.208x1.194–1.2171.126x1.114–1.150
packed5121.270x †1.263–1.286-1.052x1.049–1.062---
hash321.224x1.208–1.234-1.083x1.069–1.0931.301x †1.225–1.3511.087x †0.991–1.4011.082x †1.047–1.108
nested1.139x1.122–1.147-1.069x1.051–1.081---

HTTP worker scaling, throughput ratio (UserCache ÷ reference)

The Go HTTP client and FrankenPHP workers share the pinned CPU set, so intervals widen as workers grow. With one operation per request, the cache call is a small part of each request.

Fixture / mix1 worker, 100 ops/request2 workers, 100 ops/request4 workers, 100 ops/request1 worker, 1 op/request2 workers, 1 op/request4 workers, 1 op/request
array / read0.998x0.976–1.0220.970x0.870–1.2291.028x1.009–1.0360.976x0.942–0.9901.077x1.032–2.0410.987x0.979–1.014
array / 99% read + 1% store0.907x0.767–0.9851.033x0.733–1.2611.141x1.139–1.1530.989x0.932–1.0140.874x0.811–1.2670.993x0.976–1.092
scalar / read1.037x1.025–1.0891.025x1.001–1.0961.052x1.041–1.0630.986x0.955–1.0150.996x0.990–0.9970.998x0.985–1.044
scalar / 99% read + 1% store1.031x1.021–1.0511.048x0.995–1.1731.100x1.093–1.1090.981x0.946–0.9950.993x0.992–1.0090.998x0.984–1.009

CLI Repeated Read

A warm CLI process stores each payload once, then times fetch() plus a small access probe on the fetched value. Each run times 2,000 operations × 12 iterations after 2 warmup iterations. Cells show the median µs per operation, with the mean below it.

WorkloadUserCacheAPCu/phpAPCu/igbinaryYac/phpFaster
constant_array0.107 µsmean 0.1102.212 µsmean 2.2031.644 µsmean 1.6262.803 µsmean 2.786UserCache 1.00xAPCu/igbinary 15.29xAPCu/php 20.58xYac/php 26.08x
route_table_read0.139 µsmean 0.140168.996 µsmean 176.71660.411 µsmean 61.510197.490 µsmean 200.483UserCache 1.00xAPCu/igbinary 433.18xAPCu/php 1,211.80xYac/php 1,416.12x
large_array0.110 µsmean 0.11196.725 µsmean 99.43755.209 µsmean 55.488115.753 µsmean 118.882UserCache 1.00xAPCu/igbinary 500.67xAPCu/php 877.16xYac/php 1,049.72x
large_string0.068 µsmean 0.0683.952 µsmean 3.9643.949 µsmean 3.94750.229 µsmean 53.148UserCache 1.00xAPCu/igbinary 58.19xAPCu/php 58.23xYac/php 740.13x
large_object_graph0.158 µsmean 0.15898.450 µsmean 105.05151.219 µsmean 54.017112.697 µsmean 115.085UserCache 1.00xAPCu/igbinary 323.46xAPCu/php 621.75xYac/php 711.72x
metadata_object_read0.218 µsmean 0.218171.744 µsmean 175.13678.897 µsmean 78.996222.300 µsmean 223.950UserCache 1.00xAPCu/igbinary 362.50xAPCu/php 789.10xYac/php 1,021.38x
metadata_object_fetch_mutate0.279 µsmean 0.280182.362 µsmean 185.54369.309 µsmean 72.928211.466 µsmean 213.408UserCache 1.00xAPCu/igbinary 248.65xAPCu/php 654.24xYac/php 758.65x
sleep_wakeup_object0.224 µsmean 0.2289.286 µsmean 9.4905.383 µsmean 5.39712.807 µsmean 13.017UserCache 1.00xAPCu/igbinary 24.02xAPCu/php 41.44xYac/php 57.15x
serialize_magic_entity0.345 µsmean 0.3504.118 µsmean 4.0203.100 µsmean 3.0165.505 µsmean 5.451UserCache 1.00xAPCu/igbinary 8.99xAPCu/php 11.94xYac/php 15.97x
unserialize_only_entity0.438 µsmean 0.4413.904 µsmean 3.9573.090 µsmean 3.2635.220 µsmean 5.334UserCache 1.00xAPCu/igbinary 7.05xAPCu/php 8.91xYac/php 11.91x
sleep_wakeup_entity_collection9.942 µsmean 10.36360.714 µsmean 61.49237.271 µsmean 38.41666.835 µsmean 68.199UserCache 1.00xAPCu/igbinary 3.75xAPCu/php 6.11xYac/php 6.72x
sleep_wakeup_large_dataset0.198 µsmean 0.19991.289 µsmean 93.18848.473 µsmean 50.174107.800 µsmean 112.239UserCache 1.00xAPCu/igbinary 244.58xAPCu/php 460.62xYac/php 543.93x
recursive_reference_graph7.628 µsmean 7.72034.169 µsmean 35.17328.140 µsmean 28.20738.848 µsmean 40.267UserCache 1.00xAPCu/igbinary 3.69xAPCu/php 4.48xYac/php 5.09x
mixed_serialization_payload0.479 µsmean 0.47815.698 µsmean 16.1689.820 µsmean 10.00119.685 µsmean 20.275UserCache 1.00xAPCu/igbinary 20.50xAPCu/php 32.77xYac/php 41.09x
product_listing_view_model4.764 µsmean 4.77161.878 µsmean 63.94339.308 µsmean 40.34371.731 µsmean 73.924UserCache 1.00xAPCu/igbinary 8.25xAPCu/php 12.99xYac/php 15.06x
multi_key_config_read0.131 µsmean 0.1348.169 µsmean 8.2475.138 µsmean 5.13410.406 µsmean 10.520UserCache 1.00xAPCu/igbinary 39.18xAPCu/php 62.29xYac/php 79.34x
safe_direct_object0.477 µsmean 0.4782.450 µsmean 2.4952.400 µsmean 2.4402.829 µsmean 2.903UserCache 1.00xAPCu/igbinary 5.03xAPCu/php 5.14xYac/php 5.93x
spl_collection_object0.830 µsmean 0.80019.045 µsmean 19.4507.057 µsmean 7.88422.545 µsmean 22.736UserCache 1.00xAPCu/igbinary 8.50xAPCu/php 22.94xYac/php 27.16x
spl_linked_collection_object1.532 µsmean 1.57319.475 µsmean 19.9277.656 µsmean 7.52924.052 µsmean 24.083UserCache 1.00xAPCu/igbinary 5.00xAPCu/php 12.71xYac/php 15.70x
spl_heap_object1.304 µsmean 1.30732.869 µsmean 33.25211.781 µsmean 11.99135.754 µsmean 37.556UserCache 1.00xAPCu/igbinary 9.03xAPCu/php 25.21xYac/php 27.42x
carbon_datetime_object195.117 µsmean 194.479230.357 µsmean 231.606222.216 µsmean 225.691240.121 µsmean 241.672UserCache 1.00xAPCu/igbinary 1.14xAPCu/php 1.18xYac/php 1.23x
carbon_model_object216.926 µsmean 217.920249.673 µsmean 254.107231.961 µsmean 234.891253.374 µsmean 254.735UserCache 1.00xAPCu/igbinary 1.07xAPCu/php 1.15xYac/php 1.17x
raw_datetime_object9.182 µsmean 9.154106.506 µsmean 108.22392.002 µsmean 92.894103.978 µsmean 105.608UserCache 1.00xAPCu/igbinary 10.02xYac/php 11.32xAPCu/php 11.60x
raw_model_object6.566 µsmean 6.622103.317 µsmean 106.41688.686 µsmean 91.445108.645 µsmean 111.685UserCache 1.00xAPCu/igbinary 13.51xAPCu/php 15.74xYac/php 16.55x
serialized_cycle_object0.151 µsmean 0.1540.403 µsmean 0.4310.443 µsmean 0.4710.529 µsmean 0.559UserCache 1.00xAPCu/php 2.67xAPCu/igbinary 2.94xYac/php 3.50x
reference_assignment_object0.119 µsmean 0.1210.360 µsmean 0.3610.468 µsmean 0.4680.489 µsmean 0.500UserCache 1.00xAPCu/php 3.03xAPCu/igbinary 3.94xYac/php 4.11x
cycle_assignment_object0.156 µsmean 0.1580.478 µsmean 0.4720.552 µsmean 0.5650.586 µsmean 0.634UserCache 1.00xAPCu/php 3.06xAPCu/igbinary 3.53xYac/php 3.75x
nested_array_assignment0.122 µsmean 0.1248.476 µsmean 8.8036.176 µsmean 6.15311.572 µsmean 11.584UserCache 1.00xAPCu/igbinary 50.64xAPCu/php 69.50xYac/php 94.88x

CLI Store

Times store() of each payload, cycling over 32 keys. Slower stores are an intentional trade-off for faster reads (note). Each run times 200 operations × 6 iterations after 2 warmup iterations. Cells show the median µs per operation, with the mean below it.

WorkloadUserCacheAPCu/phpAPCu/igbinaryYac/phpFaster
constant_arraystore trade-off note1.945 µsmean 1.9571.257 µsmean 1.2620.907 µsmean 0.9142.033 µsmean 2.137APCu/igbinary 1.00xAPCu/php 1.39xUserCache 2.15xYac/php 2.24x
route_table_readstore trade-off note93.857 µsmean 94.89091.483 µsmean 93.14575.178 µsmean 79.051150.444 µsmean 156.766APCu/igbinary 1.00xAPCu/php 1.22xUserCache 1.25xYac/php 2.00x
large_arraystore trade-off note67.827 µsmean 70.97354.442 µsmean 54.72950.186 µsmean 50.00794.555 µsmean 94.652APCu/igbinary 1.00xAPCu/php 1.08xUserCache 1.35xYac/php 1.88x
large_string3.719 µsmean 3.7454.050 µsmean 4.0664.353 µsmean 4.40482.173 µsmean 82.934UserCache 1.00xAPCu/php 1.09xAPCu/igbinary 1.17xYac/php 22.09x
large_object_graphstore trade-off note72.207 µsmean 72.07652.551 µsmean 54.86741.287 µsmean 41.28089.700 µsmean 103.165APCu/igbinary 1.00xAPCu/php 1.27xUserCache 1.75xYac/php 2.17x
metadata_object_readstore trade-off note118.597 µsmean 120.82197.611 µsmean 101.15576.649 µsmean 76.862159.701 µsmean 160.926APCu/igbinary 1.00xAPCu/php 1.27xUserCache 1.55xYac/php 2.08x
metadata_object_fetch_mutatestore trade-off note120.038 µsmean 124.14297.057 µsmean 97.16676.973 µsmean 77.848158.511 µsmean 159.235APCu/igbinary 1.00xAPCu/php 1.26xUserCache 1.56xYac/php 2.06x
sleep_wakeup_objectstore trade-off note8.153 µsmean 8.1595.551 µsmean 5.5144.219 µsmean 4.2289.227 µsmean 9.234APCu/igbinary 1.00xAPCu/php 1.32xUserCache 1.93xYac/php 2.19x
serialize_magic_entitystore trade-off note4.573 µsmean 4.6152.097 µsmean 2.1082.628 µsmean 2.7263.643 µsmean 3.657APCu/php 1.00xAPCu/igbinary 1.25xYac/php 1.74xUserCache 2.18x
unserialize_only_entitystore trade-off note4.569 µsmean 4.5762.168 µsmean 2.1902.109 µsmean 2.1083.889 µsmean 3.926APCu/igbinary 1.00xAPCu/php 1.03xYac/php 1.84xUserCache 2.17x
sleep_wakeup_entity_collectionstore trade-off note65.163 µsmean 65.73531.588 µsmean 31.66322.808 µsmean 23.26342.697 µsmean 42.734APCu/igbinary 1.00xAPCu/php 1.38xYac/php 1.87xUserCache 2.86x
sleep_wakeup_large_datasetstore trade-off note80.527 µsmean 80.42852.813 µsmean 52.93943.969 µsmean 45.19685.671 µsmean 87.429APCu/igbinary 1.00xAPCu/php 1.20xUserCache 1.83xYac/php 1.95x
recursive_reference_graphstore trade-off note37.854 µsmean 38.06121.037 µsmean 21.18216.950 µsmean 16.91427.020 µsmean 27.128APCu/igbinary 1.00xAPCu/php 1.24xYac/php 1.59xUserCache 2.23x
mixed_serialization_payloadstore trade-off note15.523 µsmean 15.9509.546 µsmean 9.54310.599 µsmean 10.58714.953 µsmean 15.106APCu/php 1.00xAPCu/igbinary 1.11xYac/php 1.57xUserCache 1.63x
product_listing_view_modelstore trade-off note41.874 µsmean 42.03523.616 µsmean 23.60222.162 µsmean 22.16839.302 µsmean 40.405APCu/igbinary 1.00xAPCu/php 1.07xYac/php 1.77xUserCache 1.89x
multi_key_config_readstore trade-off note7.051 µsmean 7.1675.325 µsmean 5.4544.133 µsmean 4.1438.835 µsmean 9.269APCu/igbinary 1.00xAPCu/php 1.29xUserCache 1.71xYac/php 2.14x
safe_direct_objectstore trade-off note1.480 µsmean 1.4691.224 µsmean 1.2351.339 µsmean 1.3881.972 µsmean 2.010APCu/php 1.00xAPCu/igbinary 1.09xUserCache 1.21xYac/php 1.61x
spl_collection_objectstore trade-off note16.577 µsmean 16.56611.857 µsmean 11.8345.202 µsmean 5.45418.280 µsmean 18.336APCu/igbinary 1.00xAPCu/php 2.28xUserCache 3.19xYac/php 3.51x
spl_linked_collection_objectstore trade-off note12.482 µsmean 12.51611.465 µsmean 11.5724.620 µsmean 4.66717.496 µsmean 17.478APCu/igbinary 1.00xAPCu/php 2.48xUserCache 2.70xYac/php 3.79x
spl_heap_objectstore trade-off note20.405 µsmean 20.48919.300 µsmean 19.6189.853 µsmean 9.93827.383 µsmean 27.779APCu/igbinary 1.00xAPCu/php 1.96xUserCache 2.07xYac/php 2.78x
carbon_datetime_objectstore trade-off note380.996 µsmean 379.306332.355 µsmean 341.119318.616 µsmean 336.071346.266 µsmean 359.789APCu/igbinary 1.00xAPCu/php 1.04xYac/php 1.09xUserCache 1.20x
carbon_model_objectstore trade-off note400.736 µsmean 413.633362.204 µsmean 361.367374.378 µsmean 380.276379.464 µsmean 395.484APCu/php 1.00xAPCu/igbinary 1.03xYac/php 1.05xUserCache 1.11x
raw_datetime_objectstore trade-off note61.650 µsmean 62.92148.316 µsmean 48.43847.573 µsmean 49.45460.891 µsmean 60.944APCu/igbinary 1.00xAPCu/php 1.02xYac/php 1.28xUserCache 1.30x
raw_model_objectstore trade-off note58.206 µsmean 58.63053.580 µsmean 55.40050.305 µsmean 51.13265.539 µsmean 66.661APCu/igbinary 1.00xAPCu/php 1.07xUserCache 1.16xYac/php 1.30x
serialized_cycle_objectstore trade-off note0.382 µsmean 0.3860.326 µsmean 0.3310.322 µsmean 0.3250.484 µsmean 0.485APCu/igbinary 1.00xAPCu/php 1.01xUserCache 1.19xYac/php 1.51x
reference_assignment_objectstore trade-off note0.360 µsmean 0.3640.301 µsmean 0.3080.313 µsmean 0.3130.427 µsmean 0.431APCu/php 1.00xAPCu/igbinary 1.04xUserCache 1.20xYac/php 1.42x
cycle_assignment_objectstore trade-off note0.378 µsmean 0.3780.317 µsmean 0.3220.322 µsmean 0.3240.478 µsmean 0.478APCu/php 1.00xAPCu/igbinary 1.02xUserCache 1.19xYac/php 1.51x
nested_array_assignmentstore trade-off note7.505 µsmean 7.5175.315 µsmean 5.3225.748 µsmean 5.7648.031 µsmean 8.004APCu/php 1.00xAPCu/igbinary 1.08xUserCache 1.41xYac/php 1.51x

FPM One Fetch Per Request

Each HTTP request through nginx and php-fpm fetches the payload once, so every fetch is the first one in its request. Each backend serves 180 requests after 20 warmup requests, 5 at a time. Time is measured inside PHP per fetch. Cells show the median µs, with the mean and interquartile range below; Workers is the number of php-fpm workers that served the requests. APCu can use one serializer per server, so there is one run per APCu serializer; UserCache and Yac were measured again in each run.

FPM One Fetch Per Request (APCu serializer=php)

WorkloadUserCacheAPCu/phpYac/phpFasterWorkers
constant_array2.125 µsmean 2.504p25-p75 1.458-3.0835.542 µsmean 6.440p25-p75 4.792-7.3556.938 µsmean 7.578p25-p75 6.073-8.437UserCache 1.00xAPCu/php 2.61xYac/php 3.26x5
route_table_read2.646 µsmean 3.554p25-p75 1.875-4.469269.583 µsmean 272.954p25-p75 245.823-289.218294.042 µsmean 307.010p25-p75 279.198-324.677UserCache 1.00xAPCu/php 101.88xYac/php 111.13x5
large_array2.417 µsmean 2.876p25-p75 1.823-3.511153.916 µsmean 153.520p25-p75 144.135-162.906163.750 µsmean 165.883p25-p75 149.552-178.781UserCache 1.00xAPCu/php 63.69xYac/php 67.76x5
large_string2.209 µsmean 2.484p25-p75 1.583-3.0947.042 µsmean 8.295p25-p75 6.459-9.33355.313 µsmean 55.232p25-p75 49.136-57.542UserCache 1.00xAPCu/php 3.19xYac/php 25.05x5
large_object_graph3.542 µsmean 4.431p25-p75 2.573-6.094155.625 µsmean 155.013p25-p75 145.104-164.126174.688 µsmean 175.513p25-p75 160.739-186.885UserCache 1.00xAPCu/php 43.94xYac/php 49.33x5
metadata_object_read3.584 µsmean 4.739p25-p75 2.656-6.583301.146 µsmean 302.736p25-p75 272.937-315.864331.125 µsmean 338.422p25-p75 304.792-359.865UserCache 1.00xAPCu/php 84.04xYac/php 92.40x5
metadata_object_fetch_mutate4.291 µsmean 4.822p25-p75 3.000-6.708296.709 µsmean 306.944p25-p75 277.678-319.500330.209 µsmean 333.448p25-p75 304.011-359.052UserCache 1.00xAPCu/php 69.15xYac/php 76.95x5
sleep_wakeup_object3.480 µsmean 4.428p25-p75 2.448-6.09418.417 µsmean 19.885p25-p75 16.291-22.30322.021 µsmean 23.472p25-p75 19.834-26.135UserCache 1.00xAPCu/php 5.29xYac/php 6.33x5
serialize_magic_entity3.563 µsmean 4.218p25-p75 2.625-5.4898.125 µsmean 9.385p25-p75 7.250-11.3759.875 µsmean 10.814p25-p75 9.000-12.511UserCache 1.00xAPCu/php 2.28xYac/php 2.77x5
unserialize_only_entity4.188 µsmean 4.565p25-p75 3.000-5.9698.959 µsmean 9.622p25-p75 7.865-11.18810.709 µsmean 11.557p25-p75 9.709-13.083UserCache 1.00xAPCu/php 2.14xYac/php 2.56x5
sleep_wakeup_entity_collection15.792 µsmean 17.556p25-p75 14.073-19.36595.500 µsmean 96.532p25-p75 87.813-101.438101.959 µsmean 102.709p25-p75 92.490-109.667UserCache 1.00xAPCu/php 6.05xYac/php 6.46x5
sleep_wakeup_large_dataset3.063 µsmean 3.642p25-p75 2.198-4.416152.104 µsmean 152.091p25-p75 141.698-162.177167.334 µsmean 166.758p25-p75 153.479-180.781UserCache 1.00xAPCu/php 49.67xYac/php 54.64x5
recursive_reference_graph13.480 µsmean 14.450p25-p75 12.458-16.43856.959 µsmean 56.636p25-p75 51.949-60.64660.480 µsmean 60.800p25-p75 54.656-64.375UserCache 1.00xAPCu/php 4.23xYac/php 4.49x5
mixed_serialization_payload4.708 µsmean 5.302p25-p75 3.500-6.83330.292 µsmean 31.467p25-p75 27.822-34.05233.751 µsmean 34.084p25-p75 30.406-37.197UserCache 1.00xAPCu/php 6.43xYac/php 7.17x5
product_listing_view_model17.271 µsmean 18.910p25-p75 15.584-20.718100.084 µsmean 100.710p25-p75 90.511-109.594109.458 µsmean 109.510p25-p75 98.813-117.646UserCache 1.00xAPCu/php 5.80xYac/php 6.34x5
multi_key_config_read2.459 µsmean 2.711p25-p75 1.708-3.32316.459 µsmean 16.718p25-p75 14.812-18.17819.500 µsmean 20.330p25-p75 17.948-22.094UserCache 1.00xAPCu/php 6.69xYac/php 7.93x5
safe_direct_object7.188 µsmean 8.010p25-p75 5.834-9.68812.334 µsmean 13.631p25-p75 9.667-16.31212.000 µsmean 13.162p25-p75 10.615-15.177UserCache 1.00xYac/php 1.67xAPCu/php 1.72x5
spl_collection_object5.438 µsmean 6.062p25-p75 3.823-7.44838.959 µsmean 38.793p25-p75 34.583-42.41642.000 µsmean 41.948p25-p75 38.375-44.937UserCache 1.00xAPCu/php 7.16xYac/php 7.72x5
spl_linked_collection_object5.604 µsmean 6.336p25-p75 4.573-7.30237.875 µsmean 37.929p25-p75 34.240-41.78140.458 µsmean 40.766p25-p75 37.250-43.563UserCache 1.00xAPCu/php 6.76xYac/php 7.22x5
spl_heap_object5.563 µsmean 6.309p25-p75 4.198-7.76159.479 µsmean 59.698p25-p75 53.615-64.91761.542 µsmean 61.370p25-p75 54.072-67.375UserCache 1.00xAPCu/php 10.69xYac/php 11.06x5
carbon_datetime_object320.625 µsmean 347.655p25-p75 295.709-343.678346.021 µsmean 352.263p25-p75 327.500-374.969360.021 µsmean 375.687p25-p75 337.157-387.678UserCache 1.00xAPCu/php 1.08xYac/php 1.12x5
carbon_model_object327.271 µsmean 336.394p25-p75 304.792-350.625368.583 µsmean 384.832p25-p75 346.708-397.532380.250 µsmean 396.050p25-p75 357.542-409.969UserCache 1.00xAPCu/php 1.13xYac/php 1.16x5
raw_datetime_object24.666 µsmean 25.085p25-p75 21.406-27.698129.291 µsmean 129.704p25-p75 115.698-138.927137.125 µsmean 138.344p25-p75 123.792-146.302UserCache 1.00xAPCu/php 5.24xYac/php 5.56x5
raw_model_object20.355 µsmean 21.145p25-p75 18.198-23.844138.500 µsmean 140.258p25-p75 127.656-151.594149.625 µsmean 149.113p25-p75 135.688-160.312UserCache 1.00xAPCu/php 6.80xYac/php 7.35x5
serialized_cycle_object3.167 µsmean 3.650p25-p75 2.292-4.1363.542 µsmean 4.047p25-p75 2.750-4.7914.084 µsmean 4.476p25-p75 3.292-5.125UserCache 1.00xAPCu/php 1.12xYac/php 1.29x5
reference_assignment_object2.584 µsmean 3.238p25-p75 2.000-3.7613.187 µsmean 3.746p25-p75 2.500-4.3543.709 µsmean 4.138p25-p75 3.083-4.791UserCache 1.00xAPCu/php 1.23xYac/php 1.44x5
cycle_assignment_object2.813 µsmean 3.354p25-p75 2.166-3.9383.354 µsmean 3.802p25-p75 2.542-4.3863.729 µsmean 4.002p25-p75 3.073-4.708UserCache 1.00xAPCu/php 1.19xYac/php 1.33x5
nested_array_assignment2.313 µsmean 2.739p25-p75 1.698-3.42718.480 µsmean 18.767p25-p75 16.552-20.75020.917 µsmean 21.351p25-p75 19.073-23.292UserCache 1.00xAPCu/php 7.99xYac/php 9.05x5

FPM One Fetch Per Request (APCu serializer=igbinary)

WorkloadUserCacheAPCu/igbinaryYac/phpFasterWorkers
constant_array2.021 µsmean 2.535p25-p75 1.500-3.0005.355 µsmean 6.116p25-p75 4.500-7.1356.791 µsmean 7.720p25-p75 6.042-8.719UserCache 1.00xAPCu/igbinary 2.65xYac/php 3.36x5
route_table_read2.542 µsmean 3.063p25-p75 1.750-4.042103.042 µsmean 102.879p25-p75 94.396-111.229301.292 µsmean 304.429p25-p75 282.438-319.469UserCache 1.00xAPCu/igbinary 40.54xYac/php 118.55x5
large_array2.417 µsmean 3.054p25-p75 1.750-3.65677.208 µsmean 77.474p25-p75 68.834-83.292165.417 µsmean 167.232p25-p75 149.782-176.969UserCache 1.00xAPCu/igbinary 31.94xYac/php 68.44x5
large_string2.042 µsmean 2.597p25-p75 1.583-3.1887.417 µsmean 8.299p25-p75 6.823-8.90654.480 µsmean 53.463p25-p75 46.583-57.063UserCache 1.00xAPCu/igbinary 3.63xYac/php 26.69x5
large_object_graph3.167 µsmean 3.884p25-p75 2.208-4.98075.396 µsmean 75.330p25-p75 66.052-82.250167.959 µsmean 169.482p25-p75 154.615-179.188UserCache 1.00xAPCu/igbinary 23.81xYac/php 53.04x5
metadata_object_read4.105 µsmean 5.093p25-p75 2.875-7.208118.271 µsmean 119.553p25-p75 105.469-127.875332.542 µsmean 347.023p25-p75 308.156-353.114UserCache 1.00xAPCu/igbinary 28.81xYac/php 81.02x5
metadata_object_fetch_mutate3.875 µsmean 4.834p25-p75 2.875-6.344118.521 µsmean 118.902p25-p75 107.063-127.115333.313 µsmean 339.651p25-p75 306.052-358.666UserCache 1.00xAPCu/igbinary 30.59xYac/php 86.02x5
sleep_wakeup_object3.167 µsmean 4.046p25-p75 2.324-5.13613.917 µsmean 14.610p25-p75 11.625-16.97921.646 µsmean 22.781p25-p75 19.750-25.636UserCache 1.00xAPCu/igbinary 4.39xYac/php 6.84x5
serialize_magic_entity3.667 µsmean 4.541p25-p75 2.833-5.7198.230 µsmean 8.935p25-p75 7.073-10.8549.875 µsmean 10.840p25-p75 9.083-12.302UserCache 1.00xAPCu/igbinary 2.24xYac/php 2.69x5
unserialize_only_entity4.167 µsmean 4.932p25-p75 3.115-6.1568.813 µsmean 9.785p25-p75 7.823-11.31211.125 µsmean 12.153p25-p75 9.959-13.917UserCache 1.00xAPCu/igbinary 2.11xYac/php 2.67x5
sleep_wakeup_entity_collection16.375 µsmean 17.307p25-p75 14.490-19.43855.604 µsmean 55.216p25-p75 50.073-59.136102.583 µsmean 103.012p25-p75 94.813-110.844UserCache 1.00xAPCu/igbinary 3.40xYac/php 6.26x5
sleep_wakeup_large_dataset2.792 µsmean 3.404p25-p75 2.125-3.88675.750 µsmean 74.917p25-p75 68.021-81.928165.604 µsmean 165.908p25-p75 151.719-176.636UserCache 1.00xAPCu/igbinary 27.14xYac/php 59.32x5
recursive_reference_graph13.667 µsmean 14.474p25-p75 12.407-16.15642.375 µsmean 42.588p25-p75 38.157-46.42859.833 µsmean 60.734p25-p75 54.833-65.635UserCache 1.00xAPCu/igbinary 3.10xYac/php 4.38x5
mixed_serialization_payload4.313 µsmean 5.070p25-p75 3.333-5.98022.771 µsmean 23.294p25-p75 19.958-25.95833.667 µsmean 34.251p25-p75 30.906-37.261UserCache 1.00xAPCu/igbinary 5.28xYac/php 7.81x5
product_listing_view_model16.938 µsmean 18.025p25-p75 15.125-20.51168.417 µsmean 69.684p25-p75 62.073-76.479108.250 µsmean 108.264p25-p75 99.500-117.208UserCache 1.00xAPCu/igbinary 4.04xYac/php 6.39x5
multi_key_config_read2.229 µsmean 2.608p25-p75 1.708-3.17713.292 µsmean 13.837p25-p75 11.698-15.55220.146 µsmean 20.483p25-p75 17.834-22.458UserCache 1.00xAPCu/igbinary 5.96xYac/php 9.04x5
safe_direct_object7.167 µsmean 7.762p25-p75 5.781-9.21912.271 µsmean 13.239p25-p75 9.917-16.50012.521 µsmean 14.831p25-p75 10.084-15.469UserCache 1.00xAPCu/igbinary 1.71xYac/php 1.75x5
spl_collection_object5.396 µsmean 6.169p25-p75 3.959-7.48917.687 µsmean 18.545p25-p75 15.615-21.22943.396 µsmean 43.581p25-p75 39.385-47.219UserCache 1.00xAPCu/igbinary 3.28xYac/php 8.04x5
spl_linked_collection_object5.646 µsmean 6.047p25-p75 4.281-7.03116.542 µsmean 17.287p25-p75 15.073-19.05243.896 µsmean 43.647p25-p75 39.792-47.011UserCache 1.00xAPCu/igbinary 2.93xYac/php 7.77x5
spl_heap_object5.563 µsmean 6.236p25-p75 4.104-7.52128.229 µsmean 28.384p25-p75 24.937-30.99062.792 µsmean 62.227p25-p75 56.083-67.396UserCache 1.00xAPCu/igbinary 5.07xYac/php 11.29x5
carbon_datetime_object325.208 µsmean 325.587p25-p75 303.188-346.917348.708 µsmean 362.766p25-p75 320.511-373.218358.438 µsmean 366.713p25-p75 340.729-384.500UserCache 1.00xAPCu/igbinary 1.07xYac/php 1.10x5
carbon_model_object321.938 µsmean 332.764p25-p75 302.656-349.511349.188 µsmean 359.867p25-p75 325.114-375.125376.167 µsmean 394.866p25-p75 352.573-407.261UserCache 1.00xAPCu/igbinary 1.08xYac/php 1.17x5
raw_datetime_object24.667 µsmean 25.509p25-p75 21.698-28.761119.292 µsmean 121.271p25-p75 106.031-130.063136.500 µsmean 138.090p25-p75 122.333-147.407UserCache 1.00xAPCu/igbinary 4.84xYac/php 5.53x5
raw_model_object20.542 µsmean 22.200p25-p75 17.948-23.854122.667 µsmean 125.850p25-p75 111.646-132.927149.813 µsmean 149.653p25-p75 136.625-163.156UserCache 1.00xAPCu/igbinary 5.97xYac/php 7.29x5
serialized_cycle_object2.792 µsmean 3.336p25-p75 2.083-4.0003.896 µsmean 4.410p25-p75 3.042-5.3023.875 µsmean 4.400p25-p75 3.083-5.219UserCache 1.00xYac/php 1.39xAPCu/igbinary 1.40x5
reference_assignment_object2.875 µsmean 3.439p25-p75 2.084-4.0943.729 µsmean 4.460p25-p75 3.042-5.0213.833 µsmean 4.294p25-p75 3.042-4.802UserCache 1.00xAPCu/igbinary 1.30xYac/php 1.33x5
cycle_assignment_object2.750 µsmean 3.291p25-p75 2.073-4.0633.813 µsmean 4.335p25-p75 2.917-5.0313.771 µsmean 4.407p25-p75 3.084-5.125UserCache 1.00xYac/php 1.37xAPCu/igbinary 1.39x5
nested_array_assignment2.271 µsmean 2.643p25-p75 1.667-3.37516.396 µsmean 16.732p25-p75 14.323-18.82321.584 µsmean 21.798p25-p75 19.615-23.396UserCache 1.00xAPCu/igbinary 7.22xYac/php 9.50x5

FPM Hot Read

Each HTTP request through nginx and php-fpm fetches the same payload 100 times, so this measures repeated fetches within one request. Each backend serves 24 requests after 4 warmup requests, 5 at a time. Time is measured inside PHP per fetch. Cells show the median µs, with the mean and interquartile range below; Workers is the number of php-fpm workers that served the requests. APCu can use one serializer per server, so there is one run per APCu serializer; UserCache and Yac were measured again in each run.

FPM Hot Read (APCu serializer=php)

WorkloadUserCacheAPCu/phpYac/phpFasterWorkers
route_table_read0.235 µsmean 0.285p25-p75 0.204-0.362216.942 µsmean 208.922p25-p75 171.755-250.875244.445 µsmean 252.785p25-p75 206.645-293.796UserCache 1.00xAPCu/php 922.33xYac/php 1,039.26x5
large_array0.218 µsmean 0.267p25-p75 0.195-0.346146.457 µsmean 144.332p25-p75 107.762-168.439166.354 µsmean 163.312p25-p75 127.510-190.895UserCache 1.00xAPCu/php 671.44xYac/php 762.66x5
large_string0.120 µsmean 0.123p25-p75 0.113-0.1354.891 µsmean 5.161p25-p75 4.495-5.30746.416 µsmean 52.610p25-p75 44.381-55.353UserCache 1.00xAPCu/php 40.82xYac/php 387.46x5
large_object_graph0.273 µsmean 0.319p25-p75 0.236-0.355115.160 µsmean 123.164p25-p75 98.085-142.245149.355 µsmean 153.335p25-p75 115.638-181.750UserCache 1.00xAPCu/php 422.60xYac/php 548.08x5
metadata_object_read0.362 µsmean 0.389p25-p75 0.307-0.467223.180 µsmean 227.469p25-p75 189.612-260.213252.498 µsmean 271.481p25-p75 221.908-321.179UserCache 1.00xAPCu/php 615.68xYac/php 696.56x5
metadata_object_fetch_mutate0.456 µsmean 0.484p25-p75 0.397-0.565245.091 µsmean 244.708p25-p75 199.652-280.845273.258 µsmean 278.378p25-p75 223.036-319.549UserCache 1.00xAPCu/php 537.67xYac/php 599.47x5
sleep_wakeup_object0.326 µsmean 0.328p25-p75 0.303-0.35310.522 µsmean 11.820p25-p75 9.890-11.13212.637 µsmean 13.515p25-p75 11.958-13.343UserCache 1.00xAPCu/php 32.31xYac/php 38.81x5
serialize_magic_entity0.466 µsmean 0.473p25-p75 0.437-0.4964.281 µsmean 4.576p25-p75 4.025-4.4395.219 µsmean 5.618p25-p75 4.988-5.391UserCache 1.00xAPCu/php 9.19xYac/php 11.20x5
unserialize_only_entity0.524 µsmean 0.520p25-p75 0.463-0.5674.313 µsmean 4.713p25-p75 4.035-4.5995.396 µsmean 5.445p25-p75 5.103-5.661UserCache 1.00xAPCu/php 8.22xYac/php 10.29x5
sleep_wakeup_entity_collection9.508 µsmean 10.138p25-p75 9.069-10.10363.798 µsmean 66.585p25-p75 54.482-76.48965.995 µsmean 74.294p25-p75 62.049-84.686UserCache 1.00xAPCu/php 6.71xYac/php 6.94x5
sleep_wakeup_large_dataset0.303 µsmean 0.302p25-p75 0.271-0.337125.316 µsmean 124.267p25-p75 96.977-145.281137.991 µsmean 146.768p25-p75 112.608-173.186UserCache 1.00xAPCu/php 413.98xYac/php 455.85x5
recursive_reference_graph8.419 µsmean 8.587p25-p75 7.845-9.03356.844 µsmean 59.594p25-p75 46.049-72.70863.046 µsmean 67.139p25-p75 50.889-80.721UserCache 1.00xAPCu/php 6.75xYac/php 7.49x5
mixed_serialization_payload0.636 µsmean 0.621p25-p75 0.560-0.68116.404 µsmean 17.036p25-p75 15.910-17.96520.130 µsmean 20.670p25-p75 19.689-21.327UserCache 1.00xAPCu/php 25.78xYac/php 31.64x5
product_listing_view_model6.008 µsmean 5.968p25-p75 5.608-6.26178.267 µsmean 81.766p25-p75 62.605-93.70480.320 µsmean 90.634p25-p75 71.177-105.701UserCache 1.00xAPCu/php 13.03xYac/php 13.37x5
multi_key_config_read0.191 µsmean 0.193p25-p75 0.176-0.2039.365 µsmean 9.814p25-p75 8.732-9.96611.828 µsmean 13.187p25-p75 11.109-12.520UserCache 1.00xAPCu/php 49.02xYac/php 61.91x5
safe_direct_object0.652 µsmean 0.645p25-p75 0.614-0.6972.976 µsmean 2.955p25-p75 2.756-3.0963.163 µsmean 3.250p25-p75 2.997-3.463UserCache 1.00xAPCu/php 4.56xYac/php 4.85x5
spl_collection_object0.909 µsmean 0.901p25-p75 0.793-0.97622.026 µsmean 25.883p25-p75 21.270-23.62425.257 µsmean 25.377p25-p75 24.921-25.800UserCache 1.00xAPCu/php 24.24xYac/php 27.79x5
spl_heap_object1.395 µsmean 1.378p25-p75 1.298-1.44233.009 µsmean 36.439p25-p75 32.086-36.16541.833 µsmean 48.217p25-p75 38.742-57.050UserCache 1.00xAPCu/php 23.67xYac/php 30.00x5
carbon_datetime_object290.019 µsmean 297.883p25-p75 238.901-364.781316.859 µsmean 311.684p25-p75 258.507-351.938311.635 µsmean 309.830p25-p75 252.736-375.413UserCache 1.00xYac/php 1.07xAPCu/php 1.09x5
carbon_model_object320.333 µsmean 318.112p25-p75 242.387-398.933343.540 µsmean 351.344p25-p75 277.204-404.143363.299 µsmean 419.841p25-p75 318.716-483.958UserCache 1.00xAPCu/php 1.07xYac/php 1.13x5
raw_datetime_object9.568 µsmean 10.089p25-p75 8.819-10.463138.346 µsmean 138.720p25-p75 107.730-167.301153.067 µsmean 149.334p25-p75 119.801-173.859UserCache 1.00xAPCu/php 14.46xYac/php 16.00x5
raw_model_object7.793 µsmean 8.033p25-p75 7.381-8.297157.846 µsmean 153.740p25-p75 117.533-176.804184.777 µsmean 182.219p25-p75 151.421-215.424UserCache 1.00xAPCu/php 20.26xYac/php 23.71x5
serialized_cycle_object0.251 µsmean 0.261p25-p75 0.224-0.2850.670 µsmean 0.676p25-p75 0.639-0.7150.780 µsmean 0.791p25-p75 0.744-0.847UserCache 1.00xAPCu/php 2.67xYac/php 3.11x5
reference_assignment_object0.191 µsmean 0.213p25-p75 0.182-0.2180.467 µsmean 0.482p25-p75 0.419-0.5190.558 µsmean 0.636p25-p75 0.529-0.622UserCache 1.00xAPCu/php 2.44xYac/php 2.92x5
cycle_assignment_object0.253 µsmean 0.270p25-p75 0.235-0.2960.695 µsmean 0.699p25-p75 0.631-0.7440.798 µsmean 0.809p25-p75 0.767-0.862UserCache 1.00xAPCu/php 2.75xYac/php 3.16x5
nested_array_assignment0.188 µsmean 0.190p25-p75 0.164-0.21110.064 µsmean 10.070p25-p75 9.592-10.51912.639 µsmean 12.973p25-p75 11.534-13.000UserCache 1.00xAPCu/php 53.61xYac/php 67.33x5

FPM Hot Read (APCu serializer=igbinary)

WorkloadUserCacheAPCu/igbinaryYac/phpFasterWorkers
route_table_read0.250 µsmean 0.292p25-p75 0.216-0.34877.568 µsmean 82.685p25-p75 67.263-89.692320.230 µsmean 318.410p25-p75 245.450-350.095UserCache 1.00xAPCu/igbinary 310.53xYac/php 1,281.97x5
large_array0.229 µsmean 0.270p25-p75 0.194-0.36574.612 µsmean 75.549p25-p75 57.775-86.259180.986 µsmean 175.026p25-p75 147.470-207.208UserCache 1.00xAPCu/igbinary 326.17xYac/php 791.19x5
large_string0.119 µsmean 0.126p25-p75 0.115-0.1334.706 µsmean 5.441p25-p75 4.564-5.11966.497 µsmean 69.453p25-p75 52.778-76.639UserCache 1.00xAPCu/igbinary 39.49xYac/php 558.00x5
large_object_graph0.294 µsmean 0.337p25-p75 0.255-0.38971.240 µsmean 73.178p25-p75 54.590-83.587182.801 µsmean 179.317p25-p75 155.085-210.030UserCache 1.00xAPCu/igbinary 242.35xYac/php 621.86x5
metadata_object_read0.353 µsmean 0.420p25-p75 0.317-0.508109.392 µsmean 110.737p25-p75 84.650-127.915311.818 µsmean 326.716p25-p75 301.480-366.387UserCache 1.00xAPCu/igbinary 310.33xYac/php 884.58x5
metadata_object_fetch_mutate0.497 µsmean 0.630p25-p75 0.463-0.709111.811 µsmean 116.274p25-p75 87.455-135.146400.872 µsmean 391.594p25-p75 345.442-422.108UserCache 1.00xAPCu/igbinary 225.12xYac/php 807.12x5
sleep_wakeup_object0.324 µsmean 0.331p25-p75 0.310-0.3605.450 µsmean 6.117p25-p75 5.312-5.68911.794 µsmean 12.626p25-p75 11.435-12.995UserCache 1.00xAPCu/igbinary 16.80xYac/php 36.36x5
serialize_magic_entity0.460 µsmean 0.450p25-p75 0.407-0.5023.221 µsmean 3.194p25-p75 3.000-3.4265.115 µsmean 5.419p25-p75 4.886-5.527UserCache 1.00xAPCu/igbinary 7.01xYac/php 11.12x5
unserialize_only_entity0.536 µsmean 0.532p25-p75 0.478-0.5533.371 µsmean 3.358p25-p75 3.119-3.5625.346 µsmean 5.636p25-p75 5.092-5.772UserCache 1.00xAPCu/igbinary 6.29xYac/php 9.97x5
sleep_wakeup_entity_collection9.627 µsmean 10.147p25-p75 9.111-10.28432.664 µsmean 36.599p25-p75 31.213-37.48886.328 µsmean 86.981p25-p75 63.435-101.911UserCache 1.00xAPCu/igbinary 3.39xYac/php 8.97x5
sleep_wakeup_large_dataset0.300 µsmean 0.306p25-p75 0.287-0.31850.429 µsmean 57.894p25-p75 47.888-61.224138.743 µsmean 147.477p25-p75 111.665-180.886UserCache 1.00xAPCu/igbinary 167.87xYac/php 461.85x5
recursive_reference_graph8.482 µsmean 8.434p25-p75 7.880-8.89634.149 µsmean 36.812p25-p75 32.429-36.34151.915 µsmean 57.000p25-p75 49.835-62.223UserCache 1.00xAPCu/igbinary 4.03xYac/php 6.12x5
mixed_serialization_payload0.632 µsmean 0.645p25-p75 0.605-0.67011.152 µsmean 11.805p25-p75 10.546-11.70820.715 µsmean 22.334p25-p75 19.949-22.226UserCache 1.00xAPCu/igbinary 17.64xYac/php 32.76x5
product_listing_view_model6.086 µsmean 6.399p25-p75 5.678-6.54946.724 µsmean 49.313p25-p75 38.803-52.48682.793 µsmean 91.320p25-p75 75.006-102.951UserCache 1.00xAPCu/igbinary 7.68xYac/php 13.60x5
multi_key_config_read0.197 µsmean 0.198p25-p75 0.185-0.2095.433 µsmean 5.680p25-p75 5.253-5.90011.575 µsmean 12.241p25-p75 11.185-12.360UserCache 1.00xAPCu/igbinary 27.60xYac/php 58.80x5
safe_direct_object0.674 µsmean 0.663p25-p75 0.626-0.7083.122 µsmean 3.187p25-p75 2.872-3.2263.240 µsmean 3.579p25-p75 3.080-3.460UserCache 1.00xAPCu/igbinary 4.63xYac/php 4.81x5
spl_collection_object0.893 µsmean 0.871p25-p75 0.815-0.9327.788 µsmean 8.230p25-p75 7.386-8.24625.845 µsmean 27.560p25-p75 24.949-27.096UserCache 1.00xAPCu/igbinary 8.72xYac/php 28.94x5
spl_heap_object1.295 µsmean 1.334p25-p75 1.239-1.42712.714 µsmean 13.462p25-p75 12.320-13.87040.951 µsmean 48.209p25-p75 37.189-57.268UserCache 1.00xAPCu/igbinary 9.82xYac/php 31.63x5
carbon_datetime_object233.902 µsmean 249.818p25-p75 204.262-295.503254.127 µsmean 281.537p25-p75 228.424-338.702277.811 µsmean 300.817p25-p75 243.126-357.210UserCache 1.00xAPCu/igbinary 1.09xYac/php 1.19x5
carbon_model_object244.284 µsmean 270.227p25-p75 228.811-320.906302.664 µsmean 302.604p25-p75 241.934-366.785307.100 µsmean 333.327p25-p75 272.887-398.403UserCache 1.00xAPCu/igbinary 1.24xYac/php 1.26x5
raw_datetime_object9.817 µsmean 11.877p25-p75 9.197-11.097115.770 µsmean 129.048p25-p75 97.122-147.067155.307 µsmean 149.713p25-p75 117.712-175.089UserCache 1.00xAPCu/igbinary 11.79xYac/php 15.82x5
raw_model_object8.162 µsmean 8.538p25-p75 7.622-8.545128.339 µsmean 132.527p25-p75 106.635-157.277166.448 µsmean 175.929p25-p75 136.230-208.568UserCache 1.00xAPCu/igbinary 15.72xYac/php 20.39x5
serialized_cycle_object0.259 µsmean 0.269p25-p75 0.235-0.2990.736 µsmean 0.739p25-p75 0.681-0.7830.829 µsmean 0.876p25-p75 0.788-0.937UserCache 1.00xAPCu/igbinary 2.85xYac/php 3.21x5
reference_assignment_object0.196 µsmean 0.205p25-p75 0.174-0.2190.576 µsmean 0.559p25-p75 0.499-0.6120.601 µsmean 0.595p25-p75 0.552-0.657UserCache 1.00xAPCu/igbinary 2.93xYac/php 3.06x5
cycle_assignment_object0.258 µsmean 0.266p25-p75 0.232-0.2960.714 µsmean 0.708p25-p75 0.636-0.7830.792 µsmean 0.809p25-p75 0.734-0.885UserCache 1.00xAPCu/igbinary 2.77xYac/php 3.07x5
nested_array_assignment0.189 µsmean 0.192p25-p75 0.170-0.2096.926 µsmean 6.899p25-p75 6.557-7.24212.710 µsmean 13.303p25-p75 11.822-13.455UserCache 1.00xAPCu/igbinary 36.61xYac/php 67.19x5

Memory Usage

Memory per workload and backend, measured in CLI outside the timed loops; smaller is better. The smallest nonnegative cache and per-fetch values are highlighted independently, including ties.

WorkloadUserCacheAPCu/phpAPCu/igbinaryYac/php
constant_arraycache 5.4 KiBfirst fetch 248 Bper fetch 0 Brequest hold 440 Bcache 1.8 KiBfirst fetch 11.0 KiBper fetch 11.0 KiBrequest hold 64 Bcache 784 Bfirst fetch 7.8 KiBper fetch 7.8 KiBrequest hold 64 Bcache n/afirst fetch 11.0 KiBper fetch 11.0 KiBrequest hold 120 B
route_table_readcache 272.0 KiBfirst fetch 248 Bper fetch 0 Brequest hold 488 Bcache 164.3 KiBfirst fetch 948.7 KiBper fetch 948.7 KiBrequest hold 112 Bcache 33.9 KiBfirst fetch 370.1 KiBper fetch 370.1 KiBrequest hold 112 Bcache n/afirst fetch 948.7 KiBper fetch 948.7 KiBrequest hold 168 B
large_arraycache 210.0 KiBfirst fetch 248 Bper fetch 0 Brequest hold 536 Bcache 88.1 KiBfirst fetch 438.8 KiBper fetch 438.8 KiBrequest hold 160 Bcache 34.6 KiBfirst fetch 302.2 KiBper fetch 302.2 KiBrequest hold 160 Bcache n/afirst fetch 438.9 KiBper fetch 438.8 KiBrequest hold 216 B
large_stringcache 194.0 KiBfirst fetch 248 Bper fetch 0 Brequest hold 456 Bcache 192.2 KiBfirst fetch 196.0 KiBper fetch 196.0 KiBrequest hold 80 Bcache 192.2 KiBfirst fetch 196.0 KiBper fetch 196.0 KiBrequest hold 80 Bcache n/afirst fetch 196.1 KiBper fetch 196.0 KiBrequest hold 136 B
large_object_graphcache 210.0 KiBfirst fetch 1.2 KiBper fetch 176 Brequest hold 2.1 KiBcache 88.4 KiBfirst fetch 439.1 KiBper fetch 439.1 KiBrequest hold 96 Bcache 34.9 KiBfirst fetch 302.6 KiBper fetch 302.6 KiBrequest hold 96 Bcache n/afirst fetch 439.1 KiBper fetch 439.1 KiBrequest hold 152 B
metadata_object_readcache 312.0 KiBfirst fetch 1.2 KiBper fetch 192 Brequest hold 2.2 KiBcache 176.6 KiBfirst fetch 1.01 MiBper fetch 1.01 MiBrequest hold 112 Bcache 40.8 KiBfirst fetch 437.2 KiBper fetch 437.2 KiBrequest hold 112 Bcache n/afirst fetch 1.01 MiBper fetch 1.01 MiBrequest hold 168 B
metadata_object_fetch_mutatecache 312.0 KiBfirst fetch 1.2 KiBper fetch 192 Brequest hold 2.2 KiBcache 176.6 KiBfirst fetch 1.01 MiBper fetch 1.01 MiBrequest hold 112 Bcache 40.8 KiBfirst fetch 437.2 KiBper fetch 437.2 KiBrequest hold 112 Bcache n/afirst fetch 1.01 MiBper fetch 1.01 MiBrequest hold 168 B
sleep_wakeup_objectcache 21.0 KiBfirst fetch 736 Bper fetch 112 Brequest hold 1.2 KiBcache 9.6 KiBfirst fetch 51.2 KiBper fetch 51.2 KiBrequest hold 80 Bcache 2.9 KiBfirst fetch 27.6 KiBper fetch 27.6 KiBrequest hold 80 Bcache n/afirst fetch 51.3 KiBper fetch 51.2 KiBrequest hold 136 B
serialize_magic_entitycache 13.8 KiBfirst fetch 1.6 KiBper fetch 224 Brequest hold 1.9 KiBcache 4.0 KiBfirst fetch 22.1 KiBper fetch 22.1 KiBrequest hold 80 Bcache 2.4 KiBfirst fetch 22.1 KiBper fetch 22.1 KiBrequest hold 80 Bcache n/afirst fetch 22.1 KiBper fetch 22.1 KiBrequest hold 136 B
unserialize_only_entitycache 14.0 KiBfirst fetch 1.6 KiBper fetch 256 Brequest hold 1.9 KiBcache 4.4 KiBfirst fetch 22.1 KiBper fetch 22.1 KiBrequest hold 80 Bcache 2.6 KiBfirst fetch 22.1 KiBper fetch 22.1 KiBrequest hold 80 Bcache n/afirst fetch 22.2 KiBper fetch 22.1 KiBrequest hold 136 B
sleep_wakeup_entity_collectioncache 65.0 KiBfirst fetch 15.7 KiBper fetch 15.1 KiBrequest hold 1.2 KiBcache 29.9 KiBfirst fetch 253.6 KiBper fetch 253.6 KiBrequest hold 80 Bcache 8.1 KiBfirst fetch 154.7 KiBper fetch 154.7 KiBrequest hold 80 Bcache n/afirst fetch 253.7 KiBper fetch 253.6 KiBrequest hold 136 B
sleep_wakeup_large_datasetcache 210.0 KiBfirst fetch 736 Bper fetch 112 Brequest hold 1.2 KiBcache 89.1 KiBfirst fetch 439.3 KiBper fetch 439.3 KiBrequest hold 80 Bcache 35.6 KiBfirst fetch 302.8 KiBper fetch 302.8 KiBrequest hold 80 Bcache n/afirst fetch 439.4 KiBper fetch 439.3 KiBrequest hold 136 B
recursive_reference_graphcache 39.0 KiBfirst fetch 12.8 KiBper fetch 12.2 KiBrequest hold 1.2 KiBcache 18.2 KiBfirst fetch 116.1 KiBper fetch 116.1 KiBrequest hold 80 Bcache 5.3 KiBfirst fetch 96.1 KiBper fetch 96.1 KiBrequest hold 80 Bcache n/afirst fetch 116.2 KiBper fetch 116.1 KiBrequest hold 136 B
mixed_serialization_payloadcache 42.5 KiBfirst fetch 2.4 KiBper fetch 712 Brequest hold 2.3 KiBcache 15.1 KiBfirst fetch 79.8 KiBper fetch 79.8 KiBrequest hold 80 Bcache 7.0 KiBfirst fetch 63.3 KiBper fetch 63.3 KiBrequest hold 80 Bcache n/afirst fetch 79.8 KiBper fetch 79.8 KiBrequest hold 136 B
product_listing_view_modelcache 76.0 KiBfirst fetch 22.7 KiBper fetch 21.7 KiBrequest hold 36.2 KiBcache 37.2 KiBfirst fetch 234.1 KiBper fetch 234.1 KiBrequest hold 960 Bcache 12.3 KiBfirst fetch 180.6 KiBper fetch 180.6 KiBrequest hold 960 Bcache n/afirst fetch 234.1 KiBper fetch 234.1 KiBrequest hold 1,016 B
multi_key_config_readcache 25.8 KiBfirst fetch 248 Bper fetch 0 Brequest hold 432 Bcache 9.3 KiBfirst fetch 43.1 KiBper fetch 43.1 KiBrequest hold 56 Bcache 2.4 KiBfirst fetch 39.2 KiBper fetch 39.2 KiBrequest hold 56 Bcache n/afirst fetch 43.2 KiBper fetch 43.1 KiBrequest hold 112 B
safe_direct_objectcache 2.3 KiBfirst fetch 2.0 KiBper fetch 976 Brequest hold 5.5 KiBcache 824 Bfirst fetch 1.4 KiBper fetch 1.4 KiBrequest hold 2.7 KiBcache 544 Bfirst fetch 1.4 KiBper fetch 1.4 KiBrequest hold 2.7 KiBcache n/afirst fetch 1.4 KiBper fetch 1.4 KiBrequest hold 2.8 KiB
spl_collection_objectcache 26.3 KiBfirst fetch 8.9 KiBper fetch 7.6 KiBrequest hold 1.9 KiBcache 15.4 KiBfirst fetch 90.6 KiBper fetch 90.6 KiBrequest hold 80 Bcache 3.0 KiBfirst fetch 36.7 KiBper fetch 36.7 KiBrequest hold 80 Bcache n/afirst fetch 90.7 KiBper fetch 90.6 KiBrequest hold 136 B
spl_linked_collection_objectcache 21.0 KiBfirst fetch 8.3 KiBper fetch 6.9 KiBrequest hold 1.9 KiBcache 15.6 KiBfirst fetch 86.5 KiBper fetch 86.5 KiBrequest hold 112 Bcache 3.0 KiBfirst fetch 33.5 KiBper fetch 33.5 KiBrequest hold 112 Bcache n/afirst fetch 86.5 KiBper fetch 86.5 KiBrequest hold 168 B
spl_heap_objectcache 38.0 KiBfirst fetch 6.4 KiBper fetch 5.0 KiBrequest hold 1.9 KiBcache 22.1 KiBfirst fetch 130.1 KiBper fetch 130.1 KiBrequest hold 96 Bcache 3.9 KiBfirst fetch 54.6 KiBper fetch 54.6 KiBrequest hold 96 Bcache n/afirst fetch 130.1 KiBper fetch 130.1 KiBrequest hold 152 B
carbon_datetime_objectcache 31.0 KiBfirst fetch 124.1 KiBper fetch 122.4 KiBrequest hold 999.9 KiBcache 31.2 KiBfirst fetch 127.0 KiBper fetch 127.0 KiBrequest hold 997.7 KiBcache 7.1 KiBfirst fetch 125.8 KiBper fetch 125.8 KiBrequest hold 997.7 KiBcache n/afirst fetch 127.1 KiBper fetch 127.0 KiBrequest hold 997.8 KiB
carbon_model_objectcache 39.0 KiBfirst fetch 112.1 KiBper fetch 110.4 KiBrequest hold 920.9 KiBcache 30.5 KiBfirst fetch 183.1 KiBper fetch 183.1 KiBrequest hold 918.7 KiBcache 8.1 KiBfirst fetch 165.2 KiBper fetch 165.2 KiBrequest hold 918.7 KiBcache n/afirst fetch 183.1 KiBper fetch 183.1 KiBrequest hold 918.8 KiB
raw_datetime_objectcache 82.0 KiBfirst fetch 70.3 KiBper fetch 68.6 KiBrequest hold 93.7 KiBcache 27.4 KiBfirst fetch 74.7 KiBper fetch 74.7 KiBrequest hold 2.8 KiBcache 6.6 KiBfirst fetch 73.5 KiBper fetch 73.5 KiBrequest hold 2.8 KiBcache n/afirst fetch 74.8 KiBper fetch 74.7 KiBrequest hold 2.8 KiB
raw_model_objectcache 87.0 KiBfirst fetch 53.7 KiBper fetch 51.9 KiBrequest hold 68.9 KiBcache 29.6 KiBfirst fetch 126.8 KiBper fetch 126.8 KiBrequest hold 2.7 KiBcache 8.0 KiBfirst fetch 109.0 KiBper fetch 109.0 KiBrequest hold 2.7 KiBcache n/afirst fetch 126.9 KiBper fetch 126.8 KiBrequest hold 2.8 KiB
serialized_cycle_objectcache 440 Bfirst fetch 1.2 KiBper fetch 192 Brequest hold 2.1 KiBcache 408 Bfirst fetch 1.0 KiBper fetch 1.0 KiBrequest hold 80 Bcache 312 Bfirst fetch 1.0 KiBper fetch 1.0 KiBrequest hold 80 Bcache n/afirst fetch 1.1 KiBper fetch 1.0 KiBrequest hold 136 B
reference_assignment_objectcache 496 Bfirst fetch 1.2 KiBper fetch 160 Brequest hold 2.1 KiBcache 384 Bfirst fetch 992 Bper fetch 992 Brequest hold 64 Bcache 336 Bfirst fetch 992 Bper fetch 992 Brequest hold 64 Bcache n/afirst fetch 1.0 KiBper fetch 992 Brequest hold 120 B
cycle_assignment_objectcache 440 Bfirst fetch 1.2 KiBper fetch 192 Brequest hold 2.1 KiBcache 400 Bfirst fetch 1.0 KiBper fetch 1.0 KiBrequest hold 56 Bcache 304 Bfirst fetch 1.0 KiBper fetch 1.0 KiBrequest hold 56 Bcache n/afirst fetch 1.1 KiBper fetch 1.0 KiBrequest hold 112 B
nested_array_assignmentcache 31.0 KiBfirst fetch 248 Bper fetch 0 Brequest hold 432 Bcache 7.9 KiBfirst fetch 59.1 KiBper fetch 59.1 KiBrequest hold 56 Bcache 3.2 KiBfirst fetch 54.7 KiBper fetch 54.7 KiBrequest hold 56 Bcache n/afirst fetch 59.1 KiBper fetch 59.1 KiBrequest hold 112 B

Shared Memory Capacity and Baseline

Reserved capacity and used memory before storing the workload, excluded from the per-value cache delta. The baseline represents startup overhead with the default isolated CLI workers. Values below are medians across workloads.

BackendReservedBaseline used
UserCache128.00 MiB7.40 MiB
APCu/php128.00 MiB640.3 KiB
APCu/igbinary128.00 MiB640.3 KiB
Yac/php136.00 MiBn/a

Resident Payload Probe

How close a UserCache fetch gets to data that is already in the request. Resident direct access runs only the access probe on a payload that already exists in the request; UserCache fetch + access is the CLI repeated read time. The difference estimates what the fetch itself costs (note).

WorkloadResident direct accessUserCache fetch + accessEstimated fetch overheadResident / UserCache
constant_arrayresident baseline note0.066 µs0.107 µs0.042 µs0.61x
route_table_readresident baseline note0.123 µs0.139 µs0.016 µs0.88x
large_arrayresident baseline note0.086 µs0.110 µs0.025 µs0.78x
large_stringresident baseline note0.042 µs0.068 µs0.026 µs0.61x
product_listing_view_modelresident baseline note0.108 µs4.764 µs4.656 µs0.02x

Bulk Read

Each run primes the key set, then times fetching all keys as one batch: a multi-key call (UserCache fetchMultiple(), APCu apcu_fetch(array), Yac get(array)) and a per-key loop. Times are µs per batch; the fastest median is green.

Bulk Read: 32 Keys

BackendMedian/batchMean/batchMean/key
user_cache_fetch_multipleUserCache fetchMultiple0.490 µs0.496 µs0.015 µs
user_cache_fetch_loopUserCache fetch loop0.968 µs0.977 µs0.031 µs
apcu_fetch_multipleAPCu/php fetch array10.582 µs10.876 µs0.340 µs
apcu_fetch_loopAPCu/php fetch loop11.465 µs11.564 µs0.361 µs
yac_fetch_multipleYac get array15.955 µs16.602 µs0.519 µs
yac_fetch_loopYac get loop16.662 µs17.302 µs0.541 µs
apcu_igbinary_fetch_multipleAPCu/igbinary fetch array10.659 µs10.653 µs0.333 µs
apcu_igbinary_fetch_loopAPCu/igbinary fetch loop11.759 µs12.011 µs0.375 µs

Bulk Read: 128 Keys

BackendMedian/batchMean/batchMean/key
user_cache_fetch_multipleUserCache fetchMultiple1.846 µs1.835 µs0.014 µs
user_cache_fetch_loopUserCache fetch loop4.563 µs4.426 µs0.035 µs
apcu_fetch_multipleAPCu/php fetch array40.339 µs41.431 µs0.324 µs
apcu_fetch_loopAPCu/php fetch loop47.664 µs47.988 µs0.375 µs
yac_fetch_multipleYac get array62.862 µs63.330 µs0.495 µs
yac_fetch_loopYac get loop65.065 µs66.258 µs0.518 µs
apcu_igbinary_fetch_multipleAPCu/igbinary fetch array42.010 µs43.136 µs0.337 µs
apcu_igbinary_fetch_loopAPCu/igbinary fetch loop52.418 µs54.130 µs0.423 µs

Workloads

What each workload stores and reads. Workload names in the result tables link here.

WorkloadWhat It MeasuresMeasured In
constant_arrayConstant arraySmall immutable constant-array payload.Mutates fetched copy: noCLI repeated read, CLI store, Resident direct access, FPM one fetch/request
route_table_readCompiled route table readFramework-shaped compiled route table and URL generator arrays.Mutates fetched copy: noCLI repeated read, CLI store, Resident direct access, FPM one fetch/request, FPM hot read
large_arrayLarge nested arrayLarger object-free nested array with repeated scalar leaves.Mutates fetched copy: noCLI repeated read, CLI store, Resident direct access, FPM one fetch/request, FPM hot read
large_stringLarge immutable stringLarge string payload that stresses byte-copy avoidance on repeated reads.Mutates fetched copy: noCLI repeated read, CLI store, Resident direct access, FPM one fetch/request, FPM hot read
large_object_graphLarge direct userland-object graphLarge payload object containing many array rows and a child object.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
metadata_object_readApplication metadata object readApplication metadata object with route and service metadata arrays.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
metadata_object_fetch_mutateApplication metadata object fetch and mutateFetches a cached userland object graph, then mutates the fetched copy.Mutates fetched copy: yesCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
sleep_wakeup_object__sleep()/__wakeup() contract objectObject routed through the serialization contract: __sleep() filters state on store, __wakeup() runs per fetch.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
serialize_magic_entity__serialize()/__unserialize() entityModern entity pair using the __serialize()/__unserialize() contract with a related entity.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
unserialize_only_entity__unserialize() only entityUserland entity declaring __unserialize() without __serialize(), matching the legacy object-data format.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
sleep_wakeup_entity_collection__sleep() entity result-set collectionORM-style result set: 100 small entities each running the __sleep()/__wakeup() contract.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
sleep_wakeup_large_dataset__sleep() object holding a large datasetReport-style object with the standard large row set behind the serialization contract.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
recursive_reference_graphRecursive parent/child reference graphCategory-tree object graph with parent back-references and the __sleep()/__wakeup() contract.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
mixed_serialization_payloadMixed plain and contract payloadRealistic cache entry mixing plain arrays, __serialize() entities, and __sleep() objects.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
product_listing_view_modelProduct listing view-modelProduction-shaped product-list cache entry mixing DTO objects, facet arrays, pagination context, and generated-at metadata.Mutates fetched copy: noCLI repeated read, CLI store, Resident direct access, FPM one fetch/request, FPM hot read
multi_key_config_readMulti-key configuration readConfiguration-entry map carried over from the old multi-key workload.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
safe_direct_objectDateTime/DateInterval direct-restore objectDateTimeImmutable, DateTimeZone, and DateInterval safe-direct state.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
spl_collection_objectSPL collection direct-restore objectArrayObject, ArrayIterator, RecursiveArrayIterator, and SplFixedArray state.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
spl_linked_collection_objectSPL linked-list direct-restore objectSplDoublyLinkedList, SplQueue, and SplStack state.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request
spl_heap_objectSPL heap direct-restore objectSplMinHeap, SplMaxHeap, and SplPriorityQueue state.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
carbon_datetime_objectCarbon DateTime serializer objectCarbonImmutable/Carbon/CarbonTimeZone object graph used to compare DateTime-derived restore costs.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
carbon_model_objectModel with Carbon propertiesDummy model objects with three Carbon properties: createdAt, updatedAt, and publishedAt.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
raw_datetime_objectRaw DateTime serializer objectDateTimeImmutable/DateTime/DateTimeZone object graph mirroring carbon_datetime_object with native date types.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
raw_model_objectModel with DateTime propertiesDummy model objects with three native DateTime properties: createdAt, updatedAt, and publishedAt.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
serialized_cycle_objectSerialized cyclic objectCyclic object graph workload used to exercise serialization fallback behavior.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
reference_assignment_objectAssigned object with child referenceUserland object with a nested referenced child object.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
cycle_assignment_objectAssigned cyclic objectCyclic userland object graph with identity-preserving peer reference.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
nested_array_assignmentAssigned nested array mutationNested array payload used by the old assignment mutation workload.Mutates fetched copy: noCLI repeated read, CLI store, FPM one fetch/request, FPM hot read
bulk_read_32_keysBulk Read: 32 KeysUses the multi-key config payload, primes 32 keys before timing, then repeatedly fetches all keys as a batch. UserCache is measured with fetchMultiple() and with a per-key fetch() loop; APCu is measured with apcu_fetch(array) and with a per-key loop, once per serializer (php and, when igbinary is available, igbinary); Yac is measured with get(array) and with a per-key loop.Measured batches per iteration: 1500Bulk read
bulk_read_128_keysBulk Read: 128 KeysUses the multi-key config payload, primes 128 keys before timing, then repeatedly fetches all keys as a batch. UserCache is measured with fetchMultiple() and with a per-key fetch() loop; APCu is measured with apcu_fetch(array) and with a per-key loop, once per serializer (php and, when igbinary is available, igbinary); Yac is measured with get(array) and with a per-key loop.Measured batches per iteration: 600Bulk read

Notes

Already-resident data is a baseline

The resident table does not include UserCache store time. It compares direct access to an already-resident payload with fetching a previously stored UserCache entry and running the same access probe. The difference estimates fetch and materialization overhead after the value has already been stored. The primary comparison for UserCache is against APCu/php and APCu/igbinary when reconstructing object-heavy payloads, not against literals already resident in the request.

Slower stores are an expected trade-off for faster reads

Store workloads are shown to make the write-side cost explicit. APCu-style shared caches are usually used for read-heavy paths, where a stored value is read many times. Store throughput is an intentional trade-off in this design, not the metric it is optimized for.

Environment

PHP8.7.0-dev (cli)
Thread SafetyNTS
Binary/workspaces/php-src/sapi/cli/php
SystemLinux db8474bfaa8d 7.0.14-orbstack-00380-ga7e0a2dc9535 #1 SMP PREEMPT Fri Aug 7 03:48:40 UTC 2026 aarch64
user_cache.shm_size128M
Loaded extensionsapcu, Core, ctype, date, dom, fileinfo, filter, hash, iconv, igbinary, json, lexbor, libxml, pcntl, pcre, PDO, pdo_sqlite, Phar, posix, random, Reflection, session, SimpleXML, SPL, sqlite3, standard, tokenizer, uri, user_cache, xml, xmlreader, xmlwriter, yac, Zend OPcache
Aggregationmedian across 3 runs
CPU affinity0-3
apc.shm_size128M
yac.serializerphp
yac.compress_threshold-1
yac.keys_memory_size8M
yac.values_memory_size128M

Data

The numbers on this page are embedded in it as JSON, in <script id="embedded-result" type="application/json"> (schema user_cache_benchmark_report, version 1). summary holds the values behind the cards and summary tables; results holds each input file below, unchanged. When results.cli_write is null, the store rows are in results.cli_read.data.write. Source paths are relative to the benchmark harness repository.

JSON.parse(document.getElementById('embedded-result').textContent)

JSON keyInputSource file
results.cli_readCLI repeated readresults/read-workloads-20260930-final/median/cli-read/user-cache-benchmark-median.json
results.cli_writeCLI storeresults/read-workloads-20260930-final/median/cli-write/user-cache-benchmark-median.json
results.residentResident payload proberesults/read-workloads-20260930-final/median/resident-payload-probe.json
results.fpm_read_once[0]FPM one fetch/request (APCu serializer=php)results/read-workloads-20260930-final/median/fpm-read-once-php.json
results.fpm_read_once[1]FPM one fetch/request (APCu serializer=igbinary)results/read-workloads-20260930-final/median/fpm-read-once-igbinary.json
results.fpm_read_hot[0]FPM hot read (APCu serializer=php)results/read-workloads-20260930-final/median/fpm-read-hot-php.json
results.fpm_read_hot[1]FPM hot read (APCu serializer=igbinary)results/read-workloads-20260930-final/median/fpm-read-hot-igbinary.json
results.bulk_read[0]Bulk read: 32 keysresults/read-workloads-20260930-final/median/bulk-read-32.json
results.bulk_read[1]Bulk read: 128 keysresults/read-workloads-20260930-final/median/bulk-read-128.json
summary.frankenphpFrankenPHP persistence summary (the full aggregate is embedded in that report)BENCH_RESULT_PERSISTENCE.html