已知限制
已知限制概述
受限的写入选项
JavaScript 远程函数仅限于读取操作。尝试在与执行函数不同的分片上对以下函数执行写入操作,将导致错误。
async_client.runOnShards
在所有分片上运行远程函数async_client.runOnKey
在负责给定键的分片上运行远程函数
此外,使用任何可用方法注册的 JavaScript 函数执行的键空间修改应在本地执行写操作
- 如果使用
registerFunction
或registerAsyncFunction
注册函数,则该函数可以插入、修改或删除与函数执行所在分片相同的键。 - 如果使用
registerKeySpaceTrigger
或registerStreamTrigger
注册函数,则键空间修改必须是引发事件的分片的本地修改。
还建议将要修改的键与引发事件的键或流放在相同的哈希槽中。例如,如果存储在哈希 myserv:user:1234
中的用户配置文件会发生更改,并且我们希望在外部计数器中对其进行计数,则我们应使用哈希标签命名计数器:{myserv:user:1234}:cnt
。
对键空间的独占访问
通过设计,异步函数保证对键空间的独占单线程访问,这是 Redis 的独特功能。在使用 JavaScript 函数进行异步编程时,对键空间的读或写模式访问必须是阻塞的,而如果不访问键空间,则执行可以是非阻塞的。此实现保持与 Redis 标准命令或 Lua 脚本和函数相同级别的数据一致性,但利用了 JavaScript 引擎的异步执行功能。
JavaScript 变量
Redis 加载的 JavaScript 引擎并未提供所有 JavaScript 全局变量(例如 console
、document
)。redis
全局变量可用于管理函数注册、日志记录等。
沙盒
此功能是沙盒化的,这意味着在函数内部,无法调用外部服务,包括其他 Redis 数据库或 API。