人與人的差距,最小的是智商,最大的是堅毅。
阿新 • • 發佈:2019-02-01
最近在專案中,要使用到多條指令要按照次序統一操作(事務操作)。
redis的客戶端使用的是php-redis。最剛開始呼叫的是multi,cmd1,cmd2,...,exec,批量執行此命令,即可。
另外一種方式:是使用eval命令。
eval命令,需要將傳參為lua指令碼,然後redis自身做解析。故可進行如下:
$luaScript = '
local result = ARGV[2];
local result = KEYS[1];
local result = KEYS[2]
return result;
';
$ret = $this->redisInstance->eval($luaScript, array("test_driver_slice_set","da","pa","dapa"),1);
這個傳入到eval的引數意思為:
第一個引數為對應執行的lua指令碼;
第三個引數為代表傳入的key的個數;
第二個為key+引數;
如上如:如果key的個數為1,則test_driver_slice_set為key;da,pa,dapa,為引數。
由於公司業務要遷移到codis,但是codis不支援multi,exec,故溝通之後,發現redis自身攜帶的eval命令可解決此問題。