这是苹果与桔子的比较。参见http://redis.io/topics/benchmarks
Redis是高效的 远程
数据存储。每次在Redis上执行命令时,都会向Redis服务器发送一条消息,如果客户端是同步的,它将阻止等待答复。因此,除了命令本身的成本之外,您还需要支付网络往返费用或IPC费用。
在现代硬件上,与其他操作相比,网络往返或IPC的费用高得惊人。这是由于以下几个原因:
- 介质的原始延迟(主要用于网络)
- 操作系统调度程序的延迟(在Linux / Unix上不保证)
- 内存高速缓存未命中的代价很高,并且在客户端和服务器进程被安排进/出时,高速缓存未命中的可能性增加。
- 在高端包装盒上,NUMA副作用
现在,让我们回顾一下结果。
比较使用生成器的实现和使用函数调用的实现,它们不会生成相同数量的Redis往返。使用生成器,您只需:
while time.time() - t - expiry < 0: yield r.get(fpKey)
因此,每次迭代1次往返。使用此功能,您可以:
if r.exists(fpKey): return r.get(fpKey)
因此,每次迭代2次往返。难怪发电机会更快。
当然,您应该重用相同的Redis连接以获得最佳性能。运行系统地连接/断开连接的基准毫无意义。
最后,关于Redis调用和文件读取之间的性能差异,您只需将本地调用与远程调用进行比较。文件读取由OS文件系统缓存,因此它们是内核和Python之间的快速内存传输操作。此处不涉及磁盘I
/ O。使用Redis,您必须支付往返的费用,因此速度要慢得多。



