使用 redis-cli 快速入门
使用 redis-cli 开始使用触发器和函数
确保您已 安装并运行 Redis Stack。或者,您可以创建一个 免费的 Redis Cloud 帐户。触发器和函数预览在 Google Cloud 亚太地区 (东京) 和 AWS 亚太地区 (新加坡) 的固定订阅计划中提供。
连接到 Redis Stack
> redis-cli -h 127.0.0.1 -p 6379
加载库
使用 TFUNCTION 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"
要更新库,请运行 TFUNCTION LOAD
命令并添加参数 REPLACE
。
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"