Skip to content

Instantly share code, notes, and snippets.

@joshtrichards
Last active September 1, 2023 11:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joshtrichards/e94bda9802e0113f2eff6c5e0e286c22 to your computer and use it in GitHub Desktop.
Save joshtrichards/e94bda9802e0113f2eff6c5e0e286c22 to your computer and use it in GitHub Desktop.
Performance boost by using Redis via UNIX sockets (instead of TCP) + Debian base (versus Alpine)

I benchmarked a significant improvement (using redis-benchmark) so this was well worth it.

Additionally, the Bullseye rather than the Alpine image appears considerably faster. Presumably because of glibc.

  • 27.44s (UNIX socket + Debian image) versus 53.29s (TCP + Alpine image)

Resources that were handy in configuration:


Redis v7.0.10 Bullseye Docker Image

TCP (localhost)

time redis-benchmark -q

root@f8529b27833e:/data# time redis-benchmark -q
PING_INLINE: 99700.90 requests per second, p50=0.255 msec
PING_MBULK: 99502.48 requests per second, p50=0.255 msec
SET: 99403.58 requests per second, p50=0.255 msec
GET: 99800.40 requests per second, p50=0.255 msec
INCR: 99601.60 requests per second, p50=0.255 msec
LPUSH: 99108.03 requests per second, p50=0.255 msec
RPUSH: 98135.42 requests per second, p50=0.255 msec
LPOP: 98716.68 requests per second, p50=0.255 msec
RPOP: 99108.03 requests per second, p50=0.255 msec
SADD: 98522.17 requests per second, p50=0.255 msec
HSET: 98135.42 requests per second, p50=0.255 msec
SPOP: 97087.38 requests per second, p50=0.255 msec
ZADD: 98716.68 requests per second, p50=0.255 msec
ZPOPMIN: 99800.40 requests per second, p50=0.255 msec
LPUSH (needed to benchmark LRANGE): 99601.60 requests per second, p50=0.255 msec
LRANGE_100 (first 100 elements): 59988.00 requests per second, p50=0.415 msec
LRANGE_300 (first 300 elements): 26553.37 requests per second, p50=0.911 msec
LRANGE_500 (first 500 elements): 18723.09 requests per second, p50=1.303 msec
LRANGE_600 (first 600 elements): 16520.73 requests per second, p50=1.495 msec
MSET (10 keys): 97656.24 requests per second, p50=0.255 msec

real    0m33.045s
user    0m17.631s
sys     0m15.112s
root@f8529b27833e:/data#

UNIX socket

root@68b1df618c33:/data# time redis-benchmark -q -s /tmp/redis.sock
PING_INLINE: 133511.34 requests per second, p50=0.183 msec
PING_MBULK: 132978.73 requests per second, p50=0.183 msec
SET: 134048.27 requests per second, p50=0.183 msec
GET: 133333.33 requests per second, p50=0.183 msec
INCR: 133689.83 requests per second, p50=0.183 msec
LPUSH: 134228.19 requests per second, p50=0.183 msec
RPUSH: 134408.59 requests per second, p50=0.183 msec
LPOP: 134408.59 requests per second, p50=0.183 msec
RPOP: 133868.81 requests per second, p50=0.183 msec
SADD: 133511.34 requests per second, p50=0.183 msec
HSET: 134408.59 requests per second, p50=0.183 msec
SPOP: 133155.80 requests per second, p50=0.183 msec
ZADD: 133511.34 requests per second, p50=0.183 msec
ZPOPMIN: 134048.27 requests per second, p50=0.183 msec
LPUSH (needed to benchmark LRANGE): 134408.59 requests per second, p50=0.183 msec
LRANGE_100 (first 100 elements): 72150.07 requests per second, p50=0.343 msec
LRANGE_300 (first 300 elements): 29868.58 requests per second, p50=0.815 msec
LRANGE_500 (first 500 elements): 20068.23 requests per second, p50=1.215 msec
LRANGE_600 (first 600 elements): 17409.47 requests per second, p50=1.415 msec
MSET (10 keys): 133511.34 requests per second, p50=0.183 msec


real    0m27.444s
user    0m17.521s
sys     0m9.779s

Redis v7.0.10 Alpine Docker Image

TCP (Localhost)

PING_INLINE: 95969.28 requests per second, p50=0.263 msec
PING_MBULK: 94607.38 requests per second, p50=0.263 msec
SET: 96153.85 requests per second, p50=0.263 msec
GET: 96246.39 requests per second, p50=0.263 msec
INCR: 97370.98 requests per second, p50=0.255 msec
LPUSH: 97276.27 requests per second, p50=0.255 msec
RPUSH: 97560.98 requests per second, p50=0.255 msec
LPOP: 96525.09 requests per second, p50=0.263 msec
RPOP: 96246.39 requests per second, p50=0.263 msec
SADD: 96432.02 requests per second, p50=0.263 msec
HSET: 96618.36 requests per second, p50=0.263 msec
SPOP: 96805.42 requests per second, p50=0.263 msec
ZADD: 95877.28 requests per second, p50=0.263 msec
ZPOPMIN: 97560.98 requests per second, p50=0.255 msec
LPUSH (needed to benchmark LRANGE): 97943.19 requests per second, p50=0.255 msec
LRANGE_100 (first 100 elements): 31496.06 requests per second, p50=0.791 msec
LRANGE_300 (first 300 elements): 12377.77 requests per second, p50=2.007 msec
LRANGE_500 (first 500 elements): 8471.70 requests per second, p50=2.935 msec
LRANGE_600 (first 600 elements): 7355.10 requests per second, p50=3.407 msec
MSET (10 keys): 94250.71 requests per second, p50=0.263 msec

real    0m 53.29s
user    0m 28.02s
sys     0m 24.99s
/usr/local/bin #

UNIX socket

/usr/local/bin # time ./redis-benchmark -q -s /tmp/redis.sock
PING_INLINE: 130208.34 requests per second, p50=0.191 msec
PING_MBULK: 130718.95 requests per second, p50=0.191 msec
SET: 130890.05 requests per second, p50=0.191 msec
GET: 131233.59 requests per second, p50=0.191 msec
INCR: 131233.59 requests per second, p50=0.191 msec
LPUSH: 130890.05 requests per second, p50=0.191 msec
RPUSH: 131752.31 requests per second, p50=0.191 msec
LPOP: 130039.02 requests per second, p50=0.191 msec
RPOP: 129870.13 requests per second, p50=0.191 msec
SADD: 131061.59 requests per second, p50=0.191 msec
HSET: 130548.30 requests per second, p50=0.191 msec
SPOP: 130208.34 requests per second, p50=0.191 msec
ZADD: 131233.59 requests per second, p50=0.191 msec
ZPOPMIN: 132450.33 requests per second, p50=0.183 msec
LPUSH (needed to benchmark LRANGE): 131406.05 requests per second, p50=0.191 msec
LRANGE_100 (first 100 elements): 35842.29 requests per second, p50=0.687 msec
LRANGE_300 (first 300 elements): 14092.45 requests per second, p50=1.759 msec
LRANGE_500 (first 500 elements): 9275.58 requests per second, p50=2.655 msec
LRANGE_600 (first 600 elements): 7874.02 requests per second, p50=3.135 msec
MSET (10 keys): 131578.95 requests per second, p50=0.191 msec

real    0m 45.61s
user    0m 27.17s
sys     0m 18.39s
/usr/local/bin #

Test platform:

  • Lenovo M920Q (Tiny)
    • Intel(R) Core(TM) i7-8700T CPU @ 2.40GHz
    • Ubuntu 22.04.2 LTS ("jammy")
    • Linux node2 5.15.0-69-generic #76-Ubuntu SMP Fri Mar 17 17:19:29 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
    • RAM: 16GB
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment