redis使用redis-benchmark查看lua脚本的性能

我想知道redis中lua脚本、原子减decr、普通的get再set请求这三者的执行效率对比,lua脚本慢的话慢多少百分比。java中测试很明显发现瓶颈在网络,百度了一番找到了这个redis自带的redis-benchmark工具。

直接执行以下命令就能得到当前的redis服务每秒能处理的各种类型请求数

redis-benchmark  -q -n 100000

 PING_INLINE: 23110.70 requests per second, p50=1.047 msec                   
PING_MBULK: 22722.11 requests per second, p50=1.071 msec                   
SET: 20898.64 requests per second, p50=1.071 msec                   
GET: 22094.56 requests per second, p50=1.095 msec                   
INCR: 22177.87 requests per second, p50=1.103 msec                   
LPUSH: 20379.05 requests per second, p50=1.095 msec                   
RPUSH: 23573.79 requests per second, p50=1.031 msec                   
LPOP: 22675.74 requests per second, p50=1.047 msec                   
RPOP: 23078.70 requests per second, p50=1.047 msec                   
SADD: 23781.21 requests per second, p50=1.023 msec                   
HSET: 24485.80 requests per second, p50=0.999 msec                   
SPOP: 24260.07 requests per second, p50=1.007 msec                   
ZADD: 24479.80 requests per second, p50=0.999 msec                   
ZPOPMIN: 21682.57 requests per second, p50=1.063 msec                   
LPUSH (needed to benchmark LRANGE): 22614.20 requests per second, p50=1.063msec
LRANGE_100 (first 100 elements): 17921.15 requests per second, p50=1.311 msec            
LRANGE_300 (first 300 elements): 11346.87 requests per second, p50=2.231 msec
LRANGE_500 (first 500 elements): 8975.05 requests per second, p50=2.951 msec
LRANGE_600 (first 600 elements): 7865.35 requests per second, p50=3.431 msec
MSET (10 keys): 22099.45 requests per second, p50=1.095 msec  

这里看到INCR原子加操作可以说跟set、get的执行效率几乎一样的,都是每秒能处理20000个请求。

然后到了lua脚本,这里官方文档写得莫名其妙,百度到的文章也只会复读机官方文档。

上面官方文档给的这个命令根本不会执行脚本,效果就是加载了10万次脚本。

 去github上面查了下立马查到了正确的测试lua脚本效率操作方式。

[BUG] redis-benchmark lua script not working · Issue #12565 · redis/redis · GitHub

测试lua脚本效率操作为:

步骤一、先加载脚本,拿到返回的SHA码

redis-cli script load "local currentValue = tonumber(redis.call('GET', 'testLua')); if currentValue ~= nil and currentValue >= 0 then redis.call('DECR', 'testLua'); return 1; else return 0; end" 

会返回一串什么sha码

f46e914e4ddd9513e6308b964af4f87b4cc0f262

步骤二、接着就可以开始性能测试了

 redis-benchmark -q -n 100000 EVALSHA f46e914e4ddd9513e6308b964af4f87b4cc0f262 0

 执行结果

EVALSHA f46e914e4ddd9513e6308b964af4f87b4cc0f262 0: 22094.56 requests per second, p50=1.103 msec

 啊这,lua脚本里包含了2个操作你同样能每秒处理22000次啊?结果好奇怪,但是测试结束我的key确实有按照脚本的预期被减了10万。

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值