我可以将LUA脚本设置为关系数据库中使用的 TRIGGER 。 例如,在用密钥' TIMELIST'附加或冲到列表之后,会触发lua脚本在列表上做一些工作?
我快速浏览一下REDIS文档中的lua-script部分,发现似乎只能显式评估脚本。我的想法不可能吗?
EXT: 如果上述想法是不可能的。我应该采取什么来解决这个问题。我有一个排序列表来存储每日配额。我用
public void SwitchTheme ()
{
if (Resources?.GetType () == typeof (DarkThemeResources))
{
Resources = new LightThemeResources ();
return;
}
Resources = new DarkThemeResources ();
}
添加一个新的配额,其日期为权重。我想排序列表作为有限列表,只保留最近7天'配额。我没有在正常的redis-list上使用LTRIM,因为配额在时间线上可能有 gap 。 Hash不适用,因为出于某种原因,我必须使访问REDIS的应用程序看不到TRUNCATION操作。
我是redis的新手。有什么建议吗?谢谢!
答案 0 :(得分:1)
不,那是不可行的。但是,您可以轻松地使用脚本来执行操作(LPUSH
,ZADD
等)以及任何其他类似触发器的逻辑。
答案 1 :(得分:1)
您可以使用ZREMRANGEBYRANK删除旧元素。
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>
答案 2 :(得分:0)
Redis在这类“触发器”方面有了有趣的发展。您可以使用以下方法完成您想要的: Redis密钥空间通知(在发生事件时得到通知-例如向您的set / zset添加密钥)并运行内部Redis模块(版本5中的新功能) 在某些情况下会执行ZREM设置-有效地使Redis成为“触发”。
从技术上讲,您可以仅使用发送pub / sub事件的键空间通知选项(在Redis中)-但如果您没有该事件的订阅者,则可能会错过事件(Redis中的pub / sub事件并不持久)。
缺点是您将不得不用C / C ++代码编写该模块并验证其是否正常工作。