自定義命令
Redis
客戶端提供了 rawCommand
方法以供使用自定義命令,可以實現(xiàn) eval
等腳本命令執(zhí)行的支持
腳本命令
可用于執(zhí)行 Redis
腳本等。
1. EVAL 執(zhí)行 Lua
腳本
調(diào)用形式:
$res = $redis->rawCommand([
'EVAL',
"lua script", # lua 腳本
'keyNums', # 指定腳本中鍵名參數(shù)的個數(shù)
// 在腳本中所用到的那些 Redis 鍵(key) 值
'key1', # 第 1 個 key 對應(yīng)的值
'key2', # 第 2 個 key 對應(yīng)的值
'key3', # 第 3 個 key 對應(yīng)的值
... # 多個 key 依次添加即可
// 在 Lua 中通過全局變量 ARGV 數(shù)組訪問,
'arg1', # 第 1 個附加 arg 參數(shù)對應(yīng)的值
'arg2', # 第 2 個附加 arg 參數(shù)對應(yīng)的值
'arg3', # 第 3 個附加 arg 參數(shù)對應(yīng)的值
... # 多個 arg 參數(shù)依次添加即可
]);
// 獲取執(zhí)行 `Lua` 腳本的調(diào)用結(jié)果
var_dump($res->getData());
使用示例:
$res = $redis->rawCommand([
'EVAL',
"return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}",
'2',
'key1',
'key2',
'first',
'second'
]);
// 獲取執(zhí)行 `Lua` 腳本的調(diào)用結(jié)果
var_dump($res->getData());
2. EVALSHA 執(zhí)行 Lua
腳本
$res = $redis->rawCommand([
'SCRIPT',
'LOAD',
"return 'hello moto'" # lua 腳本
]);
$sha1 = $res->getData(); # SHA1 校驗和
var_dump($sha1);
$res = $redis->rawCommand([
'EVALSHA',
$sha1,
'0'
]);
var_dump($res->getData());
3. SCRIPT 查看腳本是否被緩存
// 載入一個腳本
$res = $redis->rawCommand([
'SCRIPT',
'LOAD',
"return 'hello moto'" # lua 腳本
]);
$sha1 = $res->getData(); # SHA1 校驗和
var_dump($sha1);
// 查看腳本是否被緩存
$res = $redis->rawCommand([
'SCRIPT',
'EXISTS',
$sha1,
'0'
]);
var_dump($res->getData()[0]);
// 清空緩存
$res = $redis->rawCommand([
'SCRIPT',
'FLUSH'
]);
var_dump($res->getData());
// 再次查看腳本是否被緩存
$res = $redis->rawCommand([
'SCRIPT',
'EXISTS',
$sha1
]);
var_dump($res->getData()[0]);
4. EVAL 從緩存中移除所有腳本
// 清空緩存
$res = $redis->rawCommand([
'SCRIPT',
'FLUSH'
]);
var_dump($res->getData());
5. EVAL 殺死當前正在運行的 Lua
腳本
// 殺死當前正在運行的 `Lua` 腳本
$res = $redis->rawCommand([
'SCRIPT',
'KILL'
]);
var_dump($res->getData());
6. EVAL 將腳本 script
添加到腳本緩存中,但并不立即執(zhí)行這個腳本。
// 將腳本 `script` 添加到腳本緩存中,但并不立即執(zhí)行這個腳本
$res = $redis->rawCommand([
'SCRIPT',
'LOAD',
"return 'hello moto'" # lua 腳本
]);
$sha1 = $res->getData(); # SHA1 校驗和
var_dump($sha1);
基本使用
$data = $redis->rawCommand(['set', 'a', '1']);
var_dump($data);
$data = $redis->rawCommand(['get', 'a']);
var_dump($data);
$redis->del('a');
rawCommand將返回一個EasySwoole\Redis\Response
對象
object(EasySwoole\Redis\Response)#8 (4) {
["status":protected]=>
int(0)
["data":protected]=>
string(2) "OK"
["msg":protected]=>
NULL
["errorType":protected]=>
NULL
}
object(EasySwoole\Redis\Response)#9 (4) {
["status":protected]=>
int(0)
["data":protected]=>
string(1) "1"
["msg":protected]=>
NULL
["errorType":protected]=>
NULL
}