*FCALL_RO 命令

调用 Redis 函数(只读版本)。与 FCALL 相同,但保证不执行任何写操作。Redis 7.0+ 引入,用于在只读副本上执行函数。


*语法

FCALL_RO function_name numkeys key [key ...] arg [arg ...]

*参数说明

参数 类型 必填 说明
function_name String 已加载的函数名称
numkeys Integer key 参数数量
key String key 参数
arg String 普通参数

*返回值

返回函数执行的结果。


*时间复杂度

取决于函数内部逻辑。


*示例

# 在只读副本上执行只读函数
> FCALL_RO my_get 1 mykey
"value"

# 尝试写操作会报错
> FCALL_RO my_incr 1 counter 5
(error) ERR Write commands are not allowed from a read-only script

*常见错误

  1. 函数包含写命令:返回错误,函数中不能使用写操作。

*最佳实践

  1. 副本只读查询:在只读副本上执行复杂的只读函数,分担主节点压力。

*FAQ

Q: FCALL_RO 和 FCALL 有什么区别? A: FCALL_RO 只允许读命令,可在只读副本上执行;FCALL 允许读写命令,只能在主节点执行。

Q: 如何判断一个函数是只读的? A: Redis 7.0+ 函数注册时可以标记 redis.register_function{name='func', flags={'no-writes'}, callback=func}