使用 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"
要更新库,请运行带有附加参数 REPLACE
的TFUNCTION 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"