Optimizing Performance

1. Using Pipelining Effectively

AspectDetail
Batch size100–1000 typically optimal
AvoidMixing reads + writes where you need responses mid-stream

2. Avoiding Large Operations

Warning: Avoid KEYS, large HGETALL/SMEMBERS, big DEL. Prefer SCAN, paginated retrieval, UNLINK.

3. Using SCAN Instead of KEYS

CommandNotes
SCAN cursor [MATCH p] [COUNT n] [TYPE t]Non-blocking iteration
HSCAN, SSCAN, ZSCANPer-collection variants
CommandDescription
UNLINK key [key ...]Asynchronous DEL — frees memory in background

5. Enabling Lazy Free

DirectiveEffect
lazyfree-lazy-eviction yesBackground free on eviction
lazyfree-lazy-expire yesBackground free on TTL expiry
lazyfree-lazy-server-del yesReplace large keys async
lazyfree-lazy-user-del yesMake DEL behave like UNLINK
lazyfree-lazy-user-flush yesFLUSHALL/FLUSHDB async by default

6. Configuring IO Threads

io-threads 4
io-threads-do-reads yes
DirectiveEffect
io-threadsParallelize socket read/write parsing
Best forHigh-throughput workloads with large values

7. Tuning TCP Parameters

DirectiveDescription
tcp-backlog 511Match OS somaxconn
tcp-keepalive 300Probe interval

8. Disabling Transparent Huge Pages

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
Note: THP causes large fork-time latency spikes.

9. Configuring Kernel Parameters

SysctlSetting
vm.overcommit_memory1 — required for BGSAVE under memory pressure
net.core.somaxconn≥ 511
net.ipv4.tcp_max_syn_backlogMatch somaxconn
fs.file-max / ulimit -n≥ maxclients + headroom

10. Using CONFIG SET for Runtime Changes

CommandDescription
CONFIG GET parameterRead current value(s)
CONFIG SET key valueChange without restart
CONFIG REWRITEPersist runtime changes to disk
CONFIG RESETSTATReset INFO counters

11. Benchmarking with redis-benchmark

redis-benchmark -h host -p 6379 -c 50 -n 1000000 -t get,set -P 16
redis-benchmark -t set -r 100000 -d 1024 --csv
redis-benchmark -t set -r 100000 --cluster
FlagDescription
-cParallel clients
-nTotal requests
-PPipeline depth
-rRandom keyspace size
-dValue size (bytes)
--clusterCluster-aware

12. Optimizing Network Latency

OptimizationDetail
Co-locatePlace app and Redis in same AZ
PipeliningAmortize RTT cost
Unix socketsunixsocket /var/run/redis.sock for same-host clients
Client-side cacheUse CLIENT TRACKING for hot reads