使用 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"