1. 程式人生 > >人與人的差距,最小的是智商,最大的是堅毅。

人與人的差距,最小的是智商,最大的是堅毅。

最近在專案中,要使用到多條指令要按照次序統一操作(事務操作)。

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命令可解決此問題。