2014-03-31 17 views
0

我試圖使用存儲在Redis中的lua腳本作爲存儲過程。使用redis中的evalsha喚醒lua存儲過程

我希望能夠將這些腳本存儲在Redis中一次,並在需要時查找並喚醒它們。

我已經能夠將這些功能添加到:功能:密鑰空間,使用Redis的-CLI添加它們,如下所示,

redis-cli 
> SET :function:f1 "redis.call('SELECT', 0);local data=redis.call('HGETALL','key:{'..ARGV[1]..'}'); print('f1'); print(ARGV[1]); return data;" 
> SET :function:f2 "redis.call('SELECT', 0); local data=redis.call('HGETALL','key:{'..ARGV[1]..'}'); print('f2'); print(ARGV[1]); return data;" 
> SET :function:f3 "redis.call('SELECT', 0);local data=redis.call('HGETALL','key:{'..ARGV[1]..'}'); print('f3'); print(ARGV[1]); return data;" 

我也一直可以使用下面的腳本加載命令建立一個腳本,可以查看這些命令,

SCRIPT LOAD "local f=loadstring(redis.call('get',':function:' .. KEYS[1]));return f()" 

這個腳本加載命令爲我提供,我可以用它來調用這些存儲的功能,我可以在命令行中運行一個一個SHA鍵,像所以,

redis-cli SCRIPT LOAD "local f=loadstring(redis.call('get',':function:' .. KEYS[1]));return f()" 
#returns: 
"31b98f9ad6a416c27e5af91ff4af12235d4da385" 

然後我可以調用從Redis的-CLI的功能之一,

redis-cli 
> evalsha 31b98f9ad6a416c27e5af91ff4af12235d4da385 1 f3 1234567890 

但我不斷收到一個錯誤,

(error) ERR Error running script (call to f_ae7d0c88e2be3f907cc9a4f5943817bc380bf68e): @user_script:1: user_script:1: bad argument #1 to 'loadstring' (string expected, got boolean) 

任何想法?建議?

+0

請參閱此鏈接屬性:https://gist.github.com/rbraband/1901178 – ChuckCottrill

回答

1

您必須修改KEYS或redis.命名空間。

Josiah Carlson剛剛爲此發佈了一個python包。

參見:herehere

約西亞還增加了包Pypi

希望這有助於TW