使用 redis-cli 快速入门

使用 redis-cli 开始使用触发器和函数

确保您已安装并运行 Redis Stack。或者,您可以创建一个免费 Redis Cloud 帐户。触发器和函数预览在 Google Cloud 亚太(东京)和 AWS 亚太(新加坡)区域的固定订阅计划中提供。

连接到 Redis Stack

> redis-cli -h 127.0.0.1 -p 6379

加载库

使用 TFUNCION LOAD 命令在 Redis 实例中创建一个新库。

127.0.0.1:6379> TFUNCTION LOAD "#!js api_version=1.0 name=myFirstLibrary\n redis.registerFunction('hello', ()=>{ return 'Hello World'})"
OK

成功创建库后,将返回 OK 响应。运行TFUNCTION LIST命令以确认您的库已添加到 Redis。

> TFUNCTION LIST
1) 1) "api_version"
   2) "1.0"
   3) "cluster_functions"
   4) (empty list or set)
   5) "configuration"
   6) "null"
   7) "engine"
   8) "js"
   9) "functions"
   10) 1) "hello"
   11) "keyspace_triggers"
   12) (empty list or set)
   13) "name"
   14) "myFirstLibrary"
   15) "pending_async_calls"
   16) (empty list or set)
   17) "pending_jobs"
   18) "0"
   19) "stream_triggers"
   20) (empty list or set)
   21) "user"
   22) "default"

TFCALL 命令用于执行 JavaScript 函数。如果命令失败,将返回错误。

127.0.0.1:6379> TFCALL myFirstLibrary.hello 0
"Hello World"

要更新库,请运行带有附加参数 REPLACETFUNCTION LOAD命令。

127.0.0.1:6379> TFUNCTION LOAD REPLACE "#!js api_version=1.0 name=myFirstLibrary\n redis.registerFunction('hello', ()=>{ return 'Hello World updated'})"
OK

上传外部文件

使用 redis-cli 命令从外部文件上传 JavaScript。该文件需要包含标头,其中包含引擎标识符、API 版本和库名称:#!js api_version=1.0 name=myFirstLibrary

#!js api_version=1.0 name=lib

redis.registerFunction('hello', ()=> {
  return 'Hello from an external file'
})

使用 redis-cli -x 选项通过命令发送文件,并使用 TFUNCTION LOAD REPLACE 替换内联库,使其来自 main.js 文件。

redis-cli -x TFUNCTION LOAD REPLACE < ./main.js

创建触发器

Redis 中的函数可以使用键空间触发器响应事件。虽然大多数这些事件是由命令调用触发的,但它们还包括在键过期或从数据库中删除时发生的事件。

有关受支持事件的完整列表,请参阅Redis 键空间通知页面

以下代码创建了一个新的键空间触发器,该触发器向新的或更新的哈希中添加一个新字段,其中包含最新的更新时间。

在数据库中加载代码

TFUNCTION LOAD REPLACE "#!js name=myFirstLibrary api_version=1.0\n 
    function addLastUpdatedField(client, data) {
        if(data.event == 'hset') {
            var currentDateTime = Date.now();
            client.call('hset', data.key, 'last_updated', currentDateTime.toString());
        }
    } 
    redis.registerKeySpaceTrigger('addLastUpdated', 'fellowship:', addLastUpdatedField);" // Register the KeySpaceTrigger 'AddLastUpdated' for keys with the prefix 'fellowship' with a callback to the function 'addLastUpdatedField'

添加带有所需前缀的新哈希以触发我们的函数。

127.0.0.1:6379> HSET fellowship:1 name "Frodo Baggins" title "The One Ring Bearer"

检查是否将上次更新时间添加到示例中。

127.0.0.1:6379> HGETALL fellowship:1
1) "name"
2) "Frodo Baggins"
3) "title"
4) "The One Ring Bearer"
5) "last_updated"
6) "1693238681822"
对本页进行评分