python redis 性能测试_在Python中使用Redis与内存进行基准检索(使用timeit)

我有一个数字清单.该列表以两种方式存储:作为内存中的python对象,或作为redis列表(在同一服务器上重新设置).

我正在比较使用python的timeit检索这两个列表所花费的时间.这是我在python shell中所做的事情:

import timeit

import redis

POOL = redis.ConnectionPool(host='127.0.0.1',port=6379,db=0)

my_server = redis.Redis(connection_pool=POOL)

print min(timeit.Timer('pylist1 = my_server.lrange("nums:5",0,-1)', setup='from __main__ import my_server').repeat(7,1000))

这给了我时间1.92341279984.

接下来,我对内存中的python对象进行计时,如下所示:

pylist = my_server.lrange("nums:5",0,-1)

print min(timeit.Timer('pylist2 = pylist',setup='from __main__ import pylist').repeat(7,1000))

这给了我4.29153442383e-05的时间.即它似乎比从redis检索相同列表快约4.5万倍.

我的问题是:我的比较方法正确吗?即,我是否准确模拟了Redis的检索与内存中的检索?对于我所想到的用例来说,这是一个巨大的性能提升,但是在实现此用例之前,只想确保我没有对基准测试有所误解即可.

解决方法:

在这里进行的比较中,您基本上只是测量第二种情况下Python将新名称绑定到值所花费的时间.因此,这比与其他进程(Redis)进行通信要快得多,这不足为奇.我想让我感到惊讶的是,如果存在该选项只是为了将其保留在内存中,您将考虑从Redis获取值.

因此,您首先需要更加清楚为什么要使用Redis.它始终会比进程内存慢,因此不需要基准测试.您需要问“为什么我不仅仅使用Python列表和字典”?有几个有效的答案:您的数据太大而无法放入内存,您需要特定于缓存的功能,例如允许值在一段时间后消失,或者您想将其用于IPC或持久性.一旦您知道此处的答案,便会告知您要进行的基准测试.问题将更像是“如何以最少的性能损失获得上面列出的优点/功能”. Redis可能不是唯一的答案.您可能会考虑使用机架来保持持久性,甚至可能考虑使用完整的关系数据库或Mongo或其他任何东西.

简而言之,一旦您对原因有了一个很好的了解,解决问题的频率就会很高.

标签:python,redis

来源: https://codeday.me/bug/20191012/1903808.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值