Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →当用户操作 Redis 相关代码(go-redis、Jedis、redis-py、ioredis)时触发。提供 Redis 安全与性能规范。
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 76% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 26% | 0% |
<instructions>
> 防止 Redis 常见性能和稳定性问题,适用于所有语言。
| 禁止 | 替代 | 原因 | |------|------|------| | KEYS * / KEYS pattern | SCAN 游标迭代 | KEYS 是 O(N) 阻塞操作,生产环境会导致 Redis 卡死 | | FLUSHDB / FLUSHALL | 按 key 前缀 SCAN + DEL | 全量删除风险极高 | | 无 TTL 的 SET | 所有 key 必须设置 TTL | 避免内存泄漏 |
go// Go (go-redis) ❌ keys, _ := rdb.Keys(ctx, "user:*").Result() // Go (go-redis) ✅ var cursor uint64 for { keys, cursor, _ = rdb.Scan(ctx, cursor, "user:*", 100).Result() // 处理 keys if cursor == 0 { break } }
java// Java (Jedis) ❌ Set<String> keys = jedis.keys("user:*"); // Java (Jedis) ✅ ScanParams params = new ScanParams().match("user:*").count(100); String cursor = "0"; do { ScanResult<String> result = jedis.scan(cursor, params); // 处理 result.getResult() cursor = result.getCursor(); } while (!cursor.equals("0"));
python# Python (redis-py) ❌ keys = r.keys("user:*") # Python (redis-py) ✅ for key in r.scan_iter(match="user:*", count=100): # 处理 key
多次 Redis 调用应使用 Pipeline 减少网络往返:
go// ❌ 循环单次调用 for _, id := range ids { rdb.Get(ctx, "user:"+id) } // ✅ Pipeline 批量 pipe := rdb.Pipeline() for _, id := range ids { pipe.Get(ctx, "user:"+id) } pipe.Exec(ctx)
go// ❌ rdb.Set(ctx, "token:123", value, 0) // ✅ rdb.Set(ctx, "token:123", value, 24*time.Hour)
</instructions>
Other measured skills in the registry, with their headline benchmark lift.