函数标志
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"