Redis Client Config Generator

Generate connection settings for one of four client libraries. They disagree on option names and on defaults, and the defaults that differ most are the ones that matter during a network partition.

The library
Connections

Redis executes commands on one thread, so every connection in the pool shares one executor. A bigger pool adds buffers and contention rather than capacity: pipelining is what raises throughput.

Off sends the password and every value in the clear.

redis-client-config.txt

updates as you type

    Examples

    Worked setups you can load into the form above. Each one is a decision the generator makes differently, and the reason it makes it.

    Without TLS

    The password crosses the network in the clear, because AUTH is an ordinary command

    library
    redis-py
    tls
    no

    A large pool

    More connections share the same single-threaded executor

    library
    go-redis
    pool-size
    200

    Common mistakes

    These are the ones that fail silently. The config is accepted, nothing raises an error, and the consequence arrives later.

    1. Leaving the socket timeout unset

      A dropped connection blocks the calling thread until the kernel's TCP timeout, which can be minutes. In a thread pool that takes the whole service down.

      Instead:Set both a connect and a command timeout.

    2. Raising the pool size to fix latency

      Redis runs commands on one thread, so extra connections add contention rather than capacity.

      Instead:Use pipelining, and size the pool for concurrency.

    3. Putting the password in source

      It ends up in version control history, and deleting the line later does not remove it from history.

      Instead:Read it from the environment or a secret store.

    4. Assuming the library defaults are conservative

      go-redis defaults to ten connections per CPU and ioredis retries twenty times per request. Neither is what most people expect.

      Instead:Set the values explicitly.

    The settings that decide what happens when the network fails

    A Redis client works identically in every library while the network is healthy. What separates them is the behaviour during a partition, and that is set by options most people never touch.

    No timeout means blocking until the OS gives up

    Most clients default to no socket timeout. A dropped connection then blocks the calling thread until the kernel's TCP timeout expires, which can be minutes. In a request-handling thread pool that is an outage of the whole service, not of one request.

    Connect and command timeouts are separate

    Every one of these libraries has two, and setting only one leaves the other unbounded. A connect timeout does nothing for a command that was accepted and never answered.

    A bigger pool does not mean more throughput

    Redis executes commands on a single thread, so every connection in the pool shares one executor. Extra connections add memory and contention rather than capacity. Pipelining is what raises throughput; more connections is not.

    The defaults differ in ways that matter

    go-redis sizes its pool at ten per CPU, which on a large machine is far more connections than intended. ioredis retries each request twenty times by default, so a partition can keep a request alive for a long time before it fails. Lettuce shares one thread-safe connection and needs a pool only for blocking commands.

    The password does not belong in the file

    Every snippet here reads it from the environment. A literal in source ends up in version control history, where removing the line later does not remove it.

    More redis tools

    Redis Hash Slot Calculator Which of the 16,384 slots does this key land in? Redis Hash Tag Tester Will these keys survive a multi-key command? Redis RESP Protocol Decoder Read what the server actually sent Redis RESP2 vs RESP3 Reply Decoder What the same reply looks like on each protocol Redis Command to RESP Exactly what your client puts on the socket Redis Glob Pattern Tester Redis globs are not shell globs Redis Connection URL Parser The path is the database number Redis Memory Unit Converter 1g and 1gb are not the same number Redis TTL Converter -1 and -2 are not durations Redis Stream ID Parser The first half is a millisecond timestamp redis.conf Validator Will Redis start with this file? Redis Production Config Linter The settings that cause incidents redis.conf to CONFIG SET Which of these can you change without a restart? Redis ACL Rule Decoder What does this user actually get? Redis ACL Validator Find the rule that does nothing Redis INFO Analyzer The numbers INFO does not print Redis SLOWLOG Analyzer What blocked everyone else Redis CLUSTER NODES Parser Read the topology, and find the gap Redis Cluster Slot Distribution Who owns how much, and what is missing Redis Keyspace Notification Flags Why your events never arrive Redis Memory Calculator The encoding decides, not the data Redis Key Count to Memory The fixed cost per key Redis Encoding Threshold Calculator One field more, several times the memory Redis Bitmap Memory Calculator Sized by the highest bit, not the set ones Redis HyperLogLog Calculator 12 KB whether you count a thousand or a billion Redis Cluster Sizing Only 60% of each node is usable Redis RDB and AOF Size Calculator The fork needs memory, not disk Redis Replication Bandwidth Calculator How long the backlog actually covers Redis Connection Pool Calculator More connections is not more throughput Redis Pipeline Calculator It removes round trips, not work Redis Cache Hit Rate Calculator 99% to 90% is ten times the backend load Redis Eviction Policy Simulator volatile- with no TTLs is noeviction Redis Cost Estimator Your rates, so nothing goes stale Redis Config File Generator A redis.conf with the reasons in it Redis ACL Generator A user that can do exactly one job Redis Maxmemory Config Generator The limit, and the headroom it needs Redis Persistence Config Generator How much you can afford to lose Redis Lua Script Generator Atomic, and short enough to stay that way Redis TLS Config Generator Encrypted, and the old port actually closed Redis Sentinel Config Generator Failover that can actually be authorised Redis Cluster Config Generator Three primaries, and the bus port open Redis Docker Compose Generator Local Redis that is not on the internet Redis MEMORY STATS Analyzer Which number actually matters Redis Bigkeys Output Analyzer Elements are not bytes Redis CLIENT LIST Analyzer Find the connection hurting you Redis LATENCY Report Analyzer An empty report may mean nothing was recorded Redis Keyspace Prefix Analyzer Which key family is growing Redis SET Command Builder A plain SET clears the TTL Redis ZRANGE Query Builder REV reverses the argument order Redis SCAN Iteration Planner COUNT is a hint, not a page size Redis Key Name Validator Legal is not the same as workable Redis Cluster Compatibility Checker Works now, breaks when you shard

    Elsewhere on the site