功能标志
JavaScript 函数的函数标志
注册函数时,可以包含有关其行为的附加信息。此信息称为函数标志。函数标志是可选参数,可以在函数实现之后指定。支持以下标志
redis.functionFlags.NO_WRITES
:此标志指示函数不执行任何写入命令。启用此标志允许在只读副本上或在内存不足 (OOM) 情况下执行函数。Redis 会强制执行此标志的行为,这意味着在设置了此标志的函数中调用写入命令的任何尝试都会导致异常。redis.functionFlags.ALLOW_OOM
:默认情况下,Redis 会阻止任何函数在 OOM 场景中运行。但是,此标志允许覆盖此行为,即使在内存不足时也能运行函数。启用此标志被认为是不安全的,可能会导致 Redis 超过maxmemory
限制。用户应仅在确定其函数不消耗额外内存的情况下启用此标志。例如,在 OOM 情况下,仅删除数据的函数是安全的。redis.functionFlags.RAW_ARGUMENTS
:默认情况下,Redis 会尝试将所有函数参数解码为JS
String
。如果解码失败,则会向客户端返回错误。但是,当设置此标志时,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]
}
);
运行示例
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"