Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Triggers 注册在发生指定(redis key,op)事件时要触发的LUA脚本_Triggers_Lua_Redis - Fatal编程技术网

Triggers 注册在发生指定(redis key,op)事件时要触发的LUA脚本

Triggers 注册在发生指定(redis key,op)事件时要触发的LUA脚本,triggers,lua,redis,Triggers,Lua,Redis,我可以将LUA脚本作为关系数据库中使用的触发器吗。 e、 例如,在使用键“TIMELIST”向列表追加或rpush之后,会触发一个lua脚本来对列表执行一些工作吗 我快速查看了REDIS文档中的lua脚本部分,发现该脚本似乎只能显式计算。我的想法不可能吗 分机: 如果上述想法是不可能的。我应该采取什么措施来解决这个问题。我有一个分类列表来存储每日配额。我用 > ZADD 'TIMELIST' <TS> <QUOTA> >ZADD“时间主义者” 要添加新的配额,请

我可以将LUA脚本作为关系数据库中使用的触发器吗。 e、 例如,在使用键“TIMELIST”向列表追加或rpush之后,会触发一个lua脚本来对列表执行一些工作吗

我快速查看了REDIS文档中的lua脚本部分,发现该脚本似乎只能显式计算。我的想法不可能吗

分机: 如果上述想法是不可能的。我应该采取什么措施来解决这个问题。我有一个分类列表来存储每日配额。我用

> ZADD 'TIMELIST' <TS> <QUOTA>
>ZADD“时间主义者”
要添加新的配额,请使用其日期作为权重。我希望排序后的列表作为一个有界列表,只保留最后7天的配额。我不会在普通redis列表上使用LTRIM,因为配额在时间轴上可能有差距。哈希也不合适,因为出于某种原因,我必须让访问REDIS的应用程序看不到截断op


我是redis的新手。有什么建议吗?谢谢

不,那是行不通的。但是,您可以轻松地使用脚本执行操作(
LPUSH
ZADD
,等等)以及任何其他类似触发器的逻辑

您可以使用删除旧元素

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZREMRANGEBYRANK myzset 0 1
(integer) 2
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "three"
2) "3"
redis>

关于这些“触发器”,Redis有一个有趣的发展。您可以通过以下方式实现您想要的: Redis密钥空间通知(在事件发生时得到通知-例如向集合/zset添加密钥)并运行内部Redis模块(版本5中新增) 这将在某些条件下执行ZREM from集合-有效地具有Redis“触发器”

从技术上讲,您可以只使用密钥空间通知选项来发送发布/订阅事件(在Redis中),但如果您没有该事件的订阅者,则可能会错过事件(Redis中的发布/订阅事件是不持久的)


缺点是您必须用C/C++代码编写该模块,并验证它是否正常工作。

谢谢。看来你的建议是目前唯一的办法,是的。