函数标志
JavaScript 函数的函数标志
Redis 堆栈 | Redis 社区版 | Redis 企业软件 | Redis 云 | Redis 社区版 | 适用于 Kubernetes 的 Redis Enterprise | 客户 |
---|
注册函数时,可以包含有关其行为的其他信息。此信息称为函数标志。函数标志是一个可选参数,可以在函数实现后指定。支持以下标志:
redis.functionFlags.NO_WRITES
:此标志表示该函数不执行任何写入命令。启用此标志允许在只读副本上或在内存不足 (OOM) 情况下执行函数。Redis 强制执行此标志的行为,这意味着在设置了此标志的函数中调用写入命令的任何尝试都将导致异常。redis.functionFlags.ALLOW_OOM
:默认情况下,Redis 会阻止任何函数在 OOM 场景中运行。但是,此标志允许覆盖此行为并运行函数,即使内存不足也是如此。启用此标志被视为不安全,可能会导致 Redis 超过maxmemory
限制。用户只有在确定其函数不会消耗额外内存时,才应启用此标志。例如,运行仅在 OOM 情况下删除数据的函数是安全的。redis.functionFlags.RAW_ARGUMENTS
:默认情况下,Redis 尝试将所有函数参数解码为JS
String
s.如果解码失败,则会向客户端返回错误。但是,当设置此标志时,Redis 会避免字符串解码,并将参数作为JS
ArrayBuffer
相反。
以下示例演示如何设置redis.functionFlags.NO_WRITES
旗:
#!js api_version=1.0 name=lib
redis.registerFunction('my_ping',
function(client){
return client.call('ping');
},
{
flags: [redis.functionFlags.NO_WRITES]
}
);
Run example:
127.0.0.1:6379> TFCALL lib.my_ping 0
"PONG"
127.0.0.1:6379> config set maxmemory 1
OK
127.0.0.1:6379> TFCALL lib.my_ping 0
"PONG"