函数标志
JavaScript 函数的函数标志
Redis 开源 | Redis Enterprise 软件 | Redis Cloud | 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
。 如果解码失败,则会向客户端返回错误。 但是,如果设置了此标志,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"