已知限制

已知限制概述

有限的写入选项

JavaScript 远程函数仅限于 **读取操作**。任何尝试在与执行函数的碎片不同的碎片上对以下函数执行写入操作都会导致错误。

  • async_client.runOnShards 在所有碎片上运行远程函数
  • async_client.runOnKey 在负责给定键的碎片上运行远程函数

此外,通过使用任何可用方法注册的 JavaScript 函数执行的键空间修改应在本地执行写入操作

  • 如果函数使用registerFunctionregisterAsyncFunction注册,则它可以插入、修改或删除与函数执行所在的相同分片中的键。
  • 如果函数使用registerKeySpaceTriggerregisterStreamTrigger注册,则键空间修改必须局限于生成事件的分片。

同时建议将要修改的键与生成事件的键或流放在同一个哈希槽中。例如,如果存储在 Hash myserv:user:1234 中的用户资料会发生更改,并且我们希望在外部计数器中对其进行计数,我们将使用哈希标签为计数器命名:{myserv:user:1234}:cnt

对键空间的独占访问

根据设计,异步函数保证对键空间的独占单线程访问,这是 Redis 的独特特性。在使用 JavaScript 函数进行异步编程时,对键空间的读写访问必须是阻塞的,而如果不访问键空间,执行则可以是非阻塞的。此实现保持与 Redis 标准命令或 Lua 脚本和函数相同的数据一致性级别,但利用了 JavaScript 引擎的异步执行功能。

JavaScript 变量

并非所有 JavaScript 全局变量都由 Redis 加载的 JavaScript 引擎提供(例如,consoledocument)。redis 全局变量可用于管理函数注册、日志记录等。

沙箱化

此功能是沙箱化的,这意味着从函数内部,无法调用外部服务,包括其他 Redis 数据库或 API。

RATE THIS PAGE
Back to top ↑