php+redis+lua

发两个php+redis+lua的例子。

一、直接在redis上运行命令demo

1  
eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second  

—|—

  • eval 命令代表后面接的是lua脚本,需要redis使用lua解析器;
  • 2 代表接下来两个参数为为KEY的参数,即为 key1 key2;
  • first、second代表ARGV的附加参数;

二、PHP的demo

1  
2  
$lua = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}";  
$s = $redis->eval($lua,array('key1','key2','first','second'),2);  

—|—

  • eval(lua脚本字符串,参数数组,前几个为key参数);

1、一次性获取所有的hash结构的所有值

1  
2  
3  
4  
$lua = "local ret={}; for i,v in pairs(KEYS) do ret[i]=redis.call('hgetall', v) end; return ret";  
$obj = new Dao_RedisBase();  
$arr_hash_key = ['hash1','hash2','hash3','hash4'];  
$hashresult=$obj->getCon()->eval($lua,$arr_hash_key,count($arr_hash_key));  

—|—

2、如果值一样则删除

1  
2  
3  
4  
5  
if redis.call("get",KEYS[1]) == ARGV[1] then  
    return redis.call("del",KEYS[1])  
else  
    return 0  
end  

—|—

注意:

#### redis的proxy可能不支持lua脚本。至少百度修改的Twemproxy就不支持proxy。所以如果你的redis集群是分布式,含有多个分片。使用了proxy,需要先判断能不能使用lua脚本。

糖果

糖果
LUA教程

Lapis框架的常用处理方法

Lapis框架的常用处理方法 Continue reading

MoonScript实现选择排序

Published on February 26, 2017

MoonScript与Redis客户端

Published on January 19, 2017