Redis Connections

作者 redisa84871d065f3MIT收錄於 2026年10月8日更新於 2026年10月8日

Redis client and connection guidance covering connection pooling, multiplexing, pipelining, client-side caching with RESP3, avoiding slow commands (KEYS, SMEMBERS, HGETALL), and tuning socket timeouts. Use when configuring a Redis client (redis-py, Jedis, Lettuce, NRedisStack), batching commands for throughput, eliminating per-request connection creation, iterating large keyspaces with SCAN, enabling client-side caching for read-heavy workloads, or setting connect and read timeouts.

AI 產生的概覽

設定 Redis 用戶端的指引:連線池、管線化、SCAN、用戶端快取與逾時設定。

功能
此技能提供有效率與 Redis 溝通的用戶端指引,涵蓋連線池與多工共用連線的取捨、以管線化批次送出指令、用 SCAN 系列增量指令取代 KEYS、HGETALL 等全量掃描指令、為熱門鍵啟用 RESP3 用戶端快取,以及調整連線與讀取逾時。它產出針對 redis-py、Jedis、Lettuce、go-redis、NRedisStack 等用戶端的設定建議與程式碼片段,並附有各主題的參考文件。
適用情境
適用於建立或檢視 Redis 用戶端設定、大量小型請求造成延遲來源不明,以及走訪大型鍵空間、集合、雜湊或清單的情境。也適合為讀多寫少的負載啟用用戶端快取,以及設定連線、讀取與寫入逾時。
執行需求
不隨附指令碼,僅有說明與參考文件。實作範例需要 Redis 伺服器,以及 redis-py、Jedis、Lettuce、go-redis 或 NRedisStack 等 Redis 用戶端函式庫;用戶端快取部分需要 RESP3 支援。

Redis Connections

Client-side guidance for talking to Redis efficiently: how to share connections, how to batch commands, which commands not to call in production, when to turn on client-side caching, and how to set timeouts that fail fast without breaking healthy traffic.

When to apply

  • Creating or reviewing a Redis client setup (redis-py, Jedis, Lettuce, go-redis, NRedisStack).
  • Making many small Redis calls and wondering where the latency is going.
  • Iterating large keyspaces, sets, hashes, or lists.
  • Enabling client-side caching for hot keys.
  • Tuning connect / read / write timeouts.

1. Pool or multiplex — never one connection per request

The single biggest mistake in Redis client code is opening a new TCP connection for every operation. Always either:

  • Pool — keep N persistent connections that the application leases per call (redis-py ConnectionPool, Jedis JedisPooled, go-redis client).
  • Multiplex — share a single connection across all requests (Lettuce, NRedisStack).
StyleUsed byNote
Poolredis-py, Jedis, go-redisEach lease blocks if pool exhausted; size the pool to your concurrency
MultiplexLettuce, NRedisStackSingle connection; cannot carry blocking commands like BLPOP
python
# redis-py — connection poolpool = redis.ConnectionPool(host="localhost", port=6379, max_connections=50)r = redis.Redis(connection_pool=pool)

See references/pooling.md [blocked] for Python + Java + Lettuce examples.

2. Pipeline bulk work

For N commands that don't depend on each other's results, send them as a single batch with pipelining. One round-trip instead of N.

python
pipe = redis.pipeline()for user_id in user_ids:    pipe.get(f"user:{user_id}")results = pipe.execute()

Use non-transactional pipelining for performance, and pipeline(transaction=True) only when you actually need atomicity (see redis-core's transactions guidance).

See references/pipelining.md [blocked].

3. Avoid commands that scan everything

Anything that walks the whole keyspace (or a whole large container) blocks the server. Use incremental variants instead.

Don'tUse
KEYS patternSCAN cursor loop
SMEMBERS large_setSSCAN
HGETALL large_hashHSCAN
LRANGE 0 -1 on a huge listPaginate (LRANGE 0 100)
python
cursor = 0while True:    cursor, keys = redis.scan(cursor, match="user:*", count=100)    for key in keys:        process(key)    if cursor == 0:        break

Blocking commands (BLPOP, BRPOP, BLMOVE) are different — they intentionally wait for data and are fine for queue consumers, but always pass a timeout, and don't issue them on a multiplexed connection (Lettuce, NRedisStack).

See references/blocking.md [blocked].

4. Client-side caching for hot keys

For data that's read often and written rarely (config, feature flags, sessions on every request), enable RESP3 client-side caching. The client keeps a local copy and the server invalidates it on writes — saving the round trip for hot reads.

python
client = redis.Redis(    host="localhost",    port=6379,    protocol=3,                                    # RESP3 is required    cache_config=redis.CacheConfig(max_size=1000),)

Skip it for write-heavy workloads or data that changes constantly — the invalidation traffic overruns the savings.

See references/client-cache.md [blocked].

5. Set explicit timeouts

Defaults vary by client and may be too generous. Pick values that match the application's failure model:

python
r = redis.Redis(    host="localhost",    socket_connect_timeout=2.0,   # fail fast on dead nodes    socket_timeout=5.0,           # tune to expected operation time    retry_on_timeout=True,)

Rule of thumb: connect timeout shorter than read/write timeout. Tight timeouts + retry-on-timeout for latency-sensitive paths; longer timeouts for batch jobs.

See references/timeouts.md [blocked].

References

來源與署名

來源:redis/agent-skills位於plugins/redis-development/skills/redis-connections提交a84871d

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架