Redis执行Lua脚本的情况
第一个测试:
往Redis里面存入1000个Hash,每个Hash里面有100个元素(Key 0-99,值是Key^2)。
PHP代码,执行33s左右
<?php $redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(1);
for ($a = 0; $a < 10000; $a++)
{
for ($b = 0; $b < 100; $b ++)
$redis->hSet($a, $b, $b*$b);
}
Lua脚本执行非常快,几乎只用了3.5s就完成了
local a =
while(a < )
do
local b =
while(b < )
do
redis.call('hset', a, b, b*b)
b =b+
end a=a+
end
本测试Lua胜出的原因,可能在于redis.call这里,是因为进程内调用(无网络IO)使得速度非常快吧。【我猜测的,不要信以为真】
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第二次测试,取出所有的值,找到符合条件的值
local t = {}
local ks = redis.call('keys', '*')
for _, k in pairs(ks) do
local h = redis.call('hgetall', k)
local key =
local val =
t = {}
for i, v in pairs(h) do
if i % == then
table.insert(t, key, v)
else
key = v
end
end
end
return t
我遍历了每一个Hash的元素,耗时0.93s
但是对应的PHP大概耗时2s,看代码
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379); $redis->select(1);
$keys = $redis->keys('*');
$r = array();
$t = time();
print count($keys);
print "\n";
foreach ($keys as $index => $key)
{
$a = $redis->hgetall($key); foreach ($a as $k => $v)
{ } } echo time() - $t;
我不确定我的Lua写得是不是对,t={}这行必须加,我不知道为什么,否则Lua脚本会好很长时间,我都是杀掉Redis Server才搞定它的,script kill不管用。
其他 的 测试,以后再继续。
Redis执行Lua脚本的情况的更多相关文章
- PHP中使用redis执行lua脚本示例
摸索了一下在PHP中如何使用redis执行lua脚本,写了一个脚本如下,供以后参考 <?php $redis = new Redis(); #实例化redis类 $redis->conne ...
- SpringBoot + Redis 执行lua脚本
1.背景 有时候,我们需要一次性操作多个 Redis 命令,但是 这样的多个操作不具备原子性,而且 Redis 的事务也不够强大,不支持事务的回滚,还无法实现命令之间的逻辑关系计算.所以,一般在开发中 ...
- Redis执行Lua脚本示例
Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行.使用脚本的好处如下: 1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在red ...
- redis之lua脚本
背景介绍 redis数据库提供了一些管理功能比如 流水线:打包发送多条命令,并在一个回复里面接收所有被执行命令的结果.事务:一次执行多条命令,被执行的命令要么就全部都被执行,要么就一个也不执行.并且事 ...
- Redis结合Lua脚本实现高并发原子性操作
从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis … 案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚 ...
- redis(6)lua脚本
一.lua脚本 lua是一种轻量小巧的脚本语言,用标准的C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. lua的详细内容你可以参考lua官方网站 ...
- 【spring boot】【redis】spring boot基于redis的LUA脚本 实现分布式锁
spring boot基于redis的LUA脚本 实现分布式锁[都是基于redis单点下] 一.spring boot 1.5.X 基于redis 的 lua脚本实现分布式锁 1.pom.xml &l ...
- 快速入门Redis调用Lua脚本及使用场景介绍
Redis 是一种非常流行的内存数据库,常用于数据缓存与高频数据存储.大多数开发人员可能听说过redis可以运行 Lua 脚本,但是可能不知道redis在什么情况下需要使用到Lua脚本. 一.阅读本文 ...
- redis中lua脚本的简单使用
一.背景 在使用redis的过程中,发现有些时候需要原子性去操作redis命令,而redis的lua脚本正好可以实现这一功能.比如: 扣减库存操作.限流操作等等. redis的pipelining虽然 ...
随机推荐
- soj1001算法分析
题目简单描述: 给定一个长数串,输出可能的字母串解个数.(A对应1,Z对应26) 样例输入:25114 样例输出:6 样例解释:可能的字母串解:YJD.YAAD.YAN.BEJD.BEAAD.BEAN ...
- php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
<?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){ $num=count($arr); ...
- [C++] MyList<T>
完成作业型...保证无bug,完全没考虑效率. #include <iostream> using namespace std; #define DEBUG #ifdef DEBUG #d ...
- WEB前端工程师面试题【前端】
1.form中的input有哪些类型?各是做什么处理使用的?2.table标签中border,cellpadding td标签中colspan,rowspan分别起什么作用?3.给Array原型添加一 ...
- 文本编辑器的使用(ckeditor/ueditor)
1.下载ckeditor或ueditor 2.编写示例代码 注意:使用ueditor时,需要特殊配置图片路径(图片的配置路径在ueditor/php/config.json文件中) 3.结果 (需要源 ...
- PHP explode()函数
源起:将日期格式的字符串拆分成年.月.日,用于组织关系介绍信的特定位置打印.感谢倪同学提供思路 定义和用法 explode()函数把字符串分割为数组 语法 explode(separator,stri ...
- js高级编程中命名空间的两种用法
第一种:// 声明一个全局对象Namespace,用来注册命名空间Namespace = new Object();// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Gr ...
- Android SDK ADT下载地址
http://dl.google.com/android/android-sdk_rXX-windows.zip http://dl.google.com/android/ADT-X.X.X.zip ...
- Spring Ioc代码阅读
1,理解控制反转 以前一直说着这个词,然后把它等于上ioc这个词,再等于上代码里一个bean里依赖了其他bean,不用new,用注解,用xml去描述,就可以了.能用就行了,实际理论的不管也不影响编 ...
- 玩玩cordova(MAC安装环境)
PhoneGap/cordova为代表的基于HTML5开发iOS/Android应用的技术,大大降低了手机App的开发门槛.虽然目前与原生的Object-C/Java开发的应用在性能上还有差距,但是对 ...