Goblin Core HSET Speed and Memory Benchmark

Generated by the native C++ harness on a dedicated benchmark host at 2026-07-16T19:07:13Z.

Summary

At 1,000,000 fields, the leanest Goblin row uses 48.67 RSS bytes/field, 20.1% less than Redis 8.8 and 45.0% less than Redis 7.2.4. The Goblin rows beat the fastest incumbent in 7 of 8 existing-field small-hash HSET comparisons. Goblin wins the million-field construction race: goblin-rt-resp-uds is 9.7% ahead of dragonfly. RT mixed p99.9 is 16.14 us, versus 16.71-22.71 us for the incumbents and 2293.39 us for efficient Goblin.

Method

One Large Hash

1,000,000 distinct 18-byte fields start with 16-byte values and then grow to 64 bytes.

Speed

Engine bulk new fields/s same-width HSET ops/s bulk grow fields/s initial optimize (s) grown optimize (s)
goblin-efficient-resp-uds 1,580,552 1,892,138 1,901,143 0.0220 0.1646
goblin-rt-resp-uds 2,542,642 1,748,940 1,980,930 0.0006 0.1446
redis-7.2.4 2,107,269 1,420,912 1,931,454 n/a n/a
redis-8.8 2,296,443 1,305,163 2,212,993 n/a n/a
valkey-9.1 2,020,588 1,233,675 2,057,101 n/a n/a
dragonfly 2,318,353 765,235 1,411,892 n/a n/a
mini-redis-go-55178df 849,171 290,513 1,009,228 n/a n/a

H* Point Throughput

All hit/existing-field probes target the same populated large hash. HMGET returns four hits. HINCRBY uses a dedicated one-field numeric hash. HDEL is covered by the mixed mutation latency table below because a stationary delete workload must restore fields. When a report retains older incumbent rows, this matrix remains Goblin-only because those runs predate the added probes.

Every row uses RESP/UDS with pipeline depth 256, a 65,536-byte client receive buffer, and no shared-memory ring.

Engine HSET update HGET hit HSETNX existing HMGET four hits HEXISTS hit HSTRLEN hit HLEN HINCRBY
goblin-efficient-resp-uds 1,892,138 1,813,212 2,041,640 961,177 2,218,602 2,095,675 3,939,983 2,218,391
goblin-rt-resp-uds 1,748,940 1,747,496 1,914,020 928,596 1,822,283 1,750,452 3,990,776 2,291,328
redis-7.2.4 1,420,912 1,587,657 1,562,798 923,881 1,665,662 1,644,563 3,128,252 1,887,251
redis-8.8 1,305,163 1,397,479 1,487,508 881,284 1,586,496 1,591,752 2,454,285 1,546,070
valkey-9.1 1,233,675 1,403,896 1,364,566 795,550 1,494,731 1,477,416 2,235,562 1,451,919
dragonfly 765,235 894,570 884,202 567,395 1,101,975 1,002,669 1,531,933 1,015,792
mini-redis-go-55178df 290,513 310,938 n/a n/a n/a n/a 376,711 n/a

Memory With 16-Byte Values

Goblin is sampled after GOBLIN.OPTIMIZE.

Engine RSS MiB RSS delta MiB RSS B/field used B/field key B/field
goblin-efficient-resp-uds 53.29 46.41 48.67 40.16 49.38
goblin-rt-resp-uds 64.36 57.84 60.65 52.01 60.43
redis-7.2.4 91.51 84.46 88.56 80.44 80.39
redis-8.8 66.34 58.06 60.88 54.13 72.39
valkey-9.1 68.88 60.92 63.88 66.93 66.88
dragonfly 95.34 72.70 76.23 76.07 76.07
mini-redis-go-55178df 232.05 219.95 230.64 n/a n/a

Memory After Growing Every Value to 64 Bytes

Engine pre-opt RSS B/field post-opt RSS B/field post-opt used B/field post-opt key B/field
goblin-efficient-resp-uds 118.93 100.96 88.16 101.18
goblin-rt-resp-uds 129.95 112.95 100.01 112.24
redis-7.2.4 162.00 162.00 136.56 136.39
redis-8.8 116.92 116.92 110.27 120.39
valkey-9.1 121.07 121.07 113.64 113.47
dragonfly 158.73 158.73 124.07 124.07
mini-redis-go-55178df 387.16 387.16 n/a n/a

Goblin Large-Hash Internals

Engine Phase fields live MiB dead MiB arena MiB index MiB total MiB
goblin-efficient-resp-uds loaded before optimize 1,000,000 33.38 0.00 42.17 5.57 47.75
goblin-efficient-resp-uds loaded after optimize 1,000,000 33.38 0.00 42.17 4.92 47.09
goblin-efficient-resp-uds grown before optimize 1,000,000 79.15 16.21 107.99 5.85 113.84
goblin-efficient-resp-uds grown after optimize 1,000,000 79.15 0.00 91.58 4.92 96.50
goblin-rt-resp-uds loaded before optimize 1,000,000 33.38 0.00 42.17 15.47 57.63
goblin-rt-resp-uds loaded after optimize 1,000,000 33.38 0.00 42.17 15.47 57.63
goblin-rt-resp-uds grown before optimize 1,000,000 79.15 16.21 107.98 15.47 123.45
goblin-rt-resp-uds grown after optimize 1,000,000 79.15 0.00 91.57 15.47 107.04

For RT rows, index MiB is the live bucket/directory storage attributed to this key. RSS and used_memory charge the entire shared fixed pool once, including free headroom; its committed capacity is exposed by INFO as realtime_hash_index_pool_bytes.

Many Hashes

Each shape holds approximately 500,000 total fields. Keys are 14 bytes, fields are 5 bytes, and values are 16 bytes.

Speed

fields/hash hashes Engine load fields/s load hashes/s middle-field HSET ops/s
8 62,500 goblin-efficient-resp-uds 3,158,202 394,775 2,344,673
8 62,500 goblin-rt-resp-uds 2,479,552 309,944 1,180,816
8 62,500 redis-7.2.4 3,011,093 376,387 1,875,931
8 62,500 redis-8.8 2,841,521 355,190 1,491,261
8 62,500 valkey-9.1 2,545,531 318,191 1,469,760
8 62,500 dragonfly 2,951,425 368,928 1,067,200
8 62,500 mini-redis-go-55178df 1,041,598 130,200 286,373
32 15,625 goblin-efficient-resp-uds 3,598,687 112,459 2,321,430
32 15,625 goblin-rt-resp-uds 3,601,072 112,533 1,991,465
32 15,625 redis-7.2.4 2,715,231 84,851 1,583,611
32 15,625 redis-8.8 2,727,703 85,241 1,319,263
32 15,625 valkey-9.1 2,536,216 79,257 1,337,186
32 15,625 dragonfly 2,965,989 92,687 996,774
32 15,625 mini-redis-go-55178df 1,212,469 37,890 307,596
64 7,812 goblin-efficient-resp-uds 3,362,986 52,547 2,372,268
64 7,812 goblin-rt-resp-uds 3,714,168 58,034 1,993,646
64 7,812 redis-7.2.4 2,114,511 33,039 1,359,206
64 7,812 redis-8.8 2,251,971 35,187 1,193,350
64 7,812 valkey-9.1 2,124,712 33,199 1,193,593
64 7,812 dragonfly 3,443,930 53,811 969,952
64 7,812 mini-redis-go-55178df 1,317,307 20,583 311,516
128 3,906 goblin-efficient-resp-uds 3,302,522 25,801 2,330,336
128 3,906 goblin-rt-resp-uds 3,948,453 30,847 2,049,722
128 3,906 redis-7.2.4 1,457,798 11,389 1,042,931
128 3,906 redis-8.8 1,633,524 12,762 965,469
128 3,906 valkey-9.1 1,583,813 12,374 981,391
128 3,906 dragonfly 3,611,788 28,217 971,422
128 3,906 mini-redis-go-55178df 1,413,451 11,043 313,313

Memory

Sampled key bytes are the mean of the first, middle, and last hash. RT process deltas include the shared fixed pool, so its configured capacity is deliberately most visible in smaller datasets.

fields/hash Engine RSS MiB RSS B/hash RSS B/field used B/hash sampled key B/hash
8 goblin-efficient-resp-uds 23.32 276.10 34.51 267.20 228.00
8 goblin-rt-resp-uds 106.78 1682.21 210.28 1319.34 1137.00
8 redis-7.2.4 24.14 287.77 35.97 288.80 280.00
8 redis-8.8 24.89 278.33 34.79 278.55 247.00
8 valkey-9.1 24.93 284.43 35.55 281.87 264.00
8 dragonfly 39.87 288.95 36.12 286.93 224.00
8 mini-redis-go-55178df 86.82 1253.97 156.75 n/a n/a
32 goblin-efficient-resp-uds 21.07 952.63 29.77 939.18 900.00
32 goblin-rt-resp-uds 54.74 3234.73 101.09 2663.75 2453.00
32 redis-7.2.4 21.28 954.47 29.83 962.03 952.00
32 redis-8.8 22.44 950.27 29.70 951.68 847.00
32 valkey-9.1 22.23 960.76 30.02 955.10 936.00
32 dragonfly 36.76 946.60 29.58 946.34 896.00
32 mini-redis-go-55178df 121.80 7363.36 230.11 n/a n/a
64 goblin-efficient-resp-uds 20.70 1856.10 29.00 1835.16 1796.00
64 goblin-rt-resp-uds 46.04 5301.17 82.83 4456.42 3582.00
64 redis-7.2.4 20.81 1845.61 28.84 1859.68 1848.00
64 redis-8.8 22.05 1847.71 28.87 1849.35 1647.00
64 valkey-9.1 21.84 1862.91 29.11 1852.73 1832.00
64 dragonfly 51.25 3848.52 60.13 3857.56 3824.00
64 mini-redis-go-55178df 110.34 13189.83 206.09 n/a n/a
128 goblin-efficient-resp-uds 20.31 3607.33 28.18 3627.11 3588.00
128 goblin-rt-resp-uds 41.73 9446.73 73.80 8041.63 7144.00
128 redis-7.2.4 20.58 3649.28 28.51 3654.96 3640.00
128 redis-8.8 21.89 3651.38 28.53 3644.58 3247.00
128 valkey-9.1 21.69 3678.64 28.74 3648.05 3624.00
128 dragonfly 50.61 7489.41 58.51 7520.00 7520.00
128 mini-redis-go-55178df 101.64 24039.09 187.81 n/a n/a

Goblin Full-Hash Relocation Density

Goblin uses --hash-listpack-max-entries 0. Each row is the median of 1 fresh-server rounds over 100,000 fields.

Engine pattern density grown fields first grow us HGET ops/s pre-opt RSS B/field post-opt RSS B/field dead MiB compact ms
goblin-efficient-resp-uds random 0.0% 0 n/a 2,632,382 54.39 51.90 0.00 1.94
goblin-efficient-resp-uds random 0.1% 100 38.02 2,631,379 54.39 49.81 0.00 7.27
goblin-efficient-resp-uds random 1.0% 1,000 39.04 2,619,070 54.39 52.10 0.02 7.36
goblin-efficient-resp-uds random 10.0% 10,000 38.27 2,621,550 60.74 58.53 0.16 8.47
goblin-efficient-resp-uds random 50.0% 50,000 38.16 2,313,733 86.63 77.78 0.81 15.91
goblin-efficient-resp-uds random 100.0% 100,000 37.36 2,518,715 118.91 101.83 1.62 10.85
goblin-efficient-resp-uds clustered 0.0% 0 n/a 2,606,565 54.39 51.90 0.00 2.00
goblin-efficient-resp-uds clustered 0.1% 100 30.72 2,626,599 54.39 49.52 0.00 7.24
goblin-efficient-resp-uds clustered 1.0% 1,000 26.77 2,601,374 54.39 50.05 0.02 7.39
goblin-efficient-resp-uds clustered 10.0% 10,000 57.52 2,576,270 58.90 54.72 0.16 8.02
goblin-efficient-resp-uds clustered 50.0% 50,000 58.85 2,291,617 84.71 75.69 0.81 11.95
goblin-efficient-resp-uds clustered 100.0% 100,000 64.82 2,536,538 118.87 101.83 1.62 9.00
goblin-rt-resp-uds random 0.0% 0 n/a 2,485,694 217.36 214.08 0.00 0.14
goblin-rt-resp-uds random 0.1% 100 40.96 2,525,929 217.44 214.41 0.00 6.38
goblin-rt-resp-uds random 1.0% 1,000 37.91 2,525,151 218.01 216.62 0.02 5.97
goblin-rt-resp-uds random 10.0% 10,000 40.15 2,531,708 223.95 223.01 0.16 6.91
goblin-rt-resp-uds random 50.0% 50,000 39.24 2,290,426 250.00 242.34 0.81 13.60
goblin-rt-resp-uds random 100.0% 100,000 40.15 2,445,278 282.52 266.38 1.62 9.41
goblin-rt-resp-uds clustered 0.0% 0 n/a 2,487,860 217.36 214.08 0.00 0.15
goblin-rt-resp-uds clustered 0.1% 100 45.42 2,454,398 217.44 214.12 0.00 6.70
goblin-rt-resp-uds clustered 1.0% 1,000 190.86 2,546,828 218.01 214.61 0.02 6.20
goblin-rt-resp-uds clustered 10.0% 10,000 46.75 2,524,247 223.87 219.28 0.16 6.66
goblin-rt-resp-uds clustered 50.0% 50,000 58.21 2,270,358 249.84 240.33 0.81 9.48
goblin-rt-resp-uds clustered 100.0% 100,000 59.20 2,452,125 282.48 266.38 1.62 7.86

Mixed Hash Write Latency

A seeded depth-one workload starts with 100,000 fields, warms 1,000 operations, and measures 10,000 unpipelined RESP/UDS round trips in C++. The client receive buffer is 65,536 bytes; this sample count provides about 10 p99.9 observations and 1 p99.99 observations per round.

Engine ops/s insert/update/delete/grow p50 us p95 us p99 us p99.9 us p99.99 us max us RSS B/field dead MiB compacting final fields
goblin-efficient-resp-uds 56,333 2502/2458/2506/2534 9.62 11.89 13.48 2293.39 2345.63 2385.07 62.72 0.14 0 99,984
goblin-rt-resp-uds 96,430 2502/2458/2506/2534 10.61 11.98 13.85 16.14 87.69 1643.45 220.18 0.14 0 99,984
redis-7.2.4 91,803 2502/2458/2506/2534 11.38 12.72 14.80 22.71 66.70 81.95 89.06 n/a n/a 99,984
redis-8.8 88,602 2502/2458/2506/2534 11.44 13.30 15.01 21.24 104.56 124.49 61.98 n/a n/a 99,984
valkey-9.1 90,297 2502/2458/2506/2534 11.00 12.08 13.87 16.71 90.46 133.68 55.35 n/a n/a 99,984
dragonfly 93,849 2502/2458/2506/2534 10.54 13.06 14.68 18.18 37.25 38.66 79.93 n/a n/a 99,984
mini-redis-go-55178df 82,309 2502/2458/2506/2534 11.58 17.00 19.40 22.65 32.59 35.56 235.93 n/a n/a 99,984
Engine operation p50 us p95 us p99 us p99.9 us p99.99 us max us
goblin-efficient-resp-uds insert 9.63 12.01 2282.47 2311.02 2385.07 2385.07
goblin-efficient-resp-uds update 9.62 11.86 12.57 15.59 16.12 16.12
goblin-efficient-resp-uds delete 9.57 11.83 13.18 15.87 17.49 17.49
goblin-efficient-resp-uds grow 9.67 11.92 13.30 16.71 18.85 18.85
goblin-rt-resp-uds insert 10.61 11.97 13.77 15.60 1643.45 1643.45
goblin-rt-resp-uds update 10.62 11.95 12.67 16.60 87.69 87.69
goblin-rt-resp-uds delete 10.56 11.94 13.35 15.85 16.14 16.14
goblin-rt-resp-uds grow 10.67 12.11 15.12 16.15 19.91 19.91
redis-7.2.4 insert 11.36 12.63 14.25 17.57 81.95 81.95
redis-7.2.4 update 11.39 12.64 14.38 19.43 39.48 39.48
redis-7.2.4 delete 11.33 12.79 14.41 19.95 66.70 66.70
redis-7.2.4 grow 11.46 13.10 15.62 22.71 42.89 42.89
redis-8.8 insert 11.44 13.12 14.55 21.24 104.56 104.56
redis-8.8 update 11.44 13.11 14.41 18.36 27.89 27.89
redis-8.8 delete 11.38 13.26 14.75 17.54 23.50 23.50
redis-8.8 grow 11.48 13.62 15.91 25.03 124.49 124.49
valkey-9.1 insert 10.98 12.00 12.85 15.03 133.68 133.68
valkey-9.1 update 11.00 12.06 13.38 16.72 90.46 90.46
valkey-9.1 delete 10.92 11.99 13.53 15.84 17.16 17.16
valkey-9.1 grow 11.08 12.48 15.25 17.29 29.90 29.90
dragonfly insert 10.45 13.00 13.47 16.15 38.66 38.66
dragonfly update 10.66 13.06 14.38 17.09 17.76 17.76
dragonfly delete 10.43 12.80 13.78 15.88 37.25 37.25
dragonfly grow 10.69 13.18 16.31 21.91 36.80 36.80
mini-redis-go-55178df insert 11.53 16.99 19.79 22.58 23.95 23.95
mini-redis-go-55178df update 11.59 17.01 19.68 22.03 26.40 26.40
mini-redis-go-55178df delete 11.56 17.02 18.34 22.75 35.56 35.56
mini-redis-go-55178df grow 11.65 17.00 18.24 20.95 25.15 25.15

The medium-hash representation crossover is measured separately in HASH-THRESHOLD-SWEEP.

Tested Servers