You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表与Redis写入性能测试疑问:为何Redis表现更慢?

问题分析与优化建议

你的测试结果完全不能代表Redis的真实性能,核心问题是用了最低效的Redis使用方式,还误解了Redis和Python列表的定位差异。

为什么当前测试结果毫无参考性

Python列表是进程内纯内存结构,所有操作都是内存读写,没有任何IO或网络开销;而你当前的Redis代码是循环发送10万次独立请求,每次请求都要经历网络往返、Redis命令解析、响应返回的开销——这些累加起来才是耗时的主要原因,和Redis本身的写入性能无关。

你忽略的关键要点

  • Redis的价值不是和内存列表比速度:Redis是独立的键值存储服务,核心优势是跨进程/跨线程数据共享、数据持久化、分布式场景支持,以及能把时间敏感的写入操作和后续异步处理解耦——而不是替代进程内的内存结构。
  • 批量操作是Redis高性能的关键:Redis原生支持批量命令(Pipeline、MSET类命令),能把多次请求打包成一次发送,彻底消除多次网络往返的开销。
  • 测试场景不符合实际使用逻辑:如果只是进程内临时存数据,Python列表/队列本来就是最优选择;但如果需要跨进程传递数据、做持久化备份、或者让多个消费者同时处理数据,Redis才是合适的方案。

优化后的Redis测试代码

用Pipeline改写测试,能大幅降低耗时:

import time
import redis

redis_pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
redis_conn = redis.Redis(connection_pool=redis_pool)

# 使用Pipeline批量写入
start_time = time.time()
pipe = redis_conn.pipeline()
for i in range(100000):
    data = {'id': i, 'name': f'user {i}', 'age': i % 100}
    pipe.hmset(f'user:{i}', data)
pipe.execute()
end_time = time.time()
print('Redis Pipeline批量写入耗时:', end_time - start_time)

# 原Python列表测试保留
start_time = time.time()
data_list = []
for i in range(100000):
    data = {'id': i, 'name': f'user {i}', 'age': i % 100}
    data_list.append(data)
end_time = time.time()
print('Python列表创建耗时:', end_time - start_time)

优化后,Redis的写入耗时会降到和列表一个数量级(甚至更快,取决于机器配置),这才是Redis的真实性能表现。

额外建议

如果你的场景是数据流缓冲+异步消费,更适合用Redis的List结构(lpush+brpop),配合Pipeline批量写入,然后在消费线程中批量读取处理,这样能最大化Redis的性能,同时实现时间敏感写入和异步处理的解耦。

内容的提问来源于stack exchange,提问作者Dave Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:10:31