功能标志
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"