【发布时间】:2015-07-06 18:00:17
【问题描述】:
我是一名 SQL 开发人员,对 redis 很陌生,但它的性能非常有趣。我有一个问题,我认为 redis 可以帮我很大的忙。我有一个熟悉的 SQL 表:
| CONTAINER <String><NoUnq> | PROCESS <String><NoUnq> | PROCESS_DATA <String><NoUnq> | TimeCreated <TimeStamp><NoUnq>|
此表在填充到最大值时大约有 ~450,000,000 行。我在 AWS 上运行它。有了这些行,我选择了一个容器中的所有进程(~1,000,000 个容器),所以我会在 sql 中有这样的东西(当然容器是索引的):
SELECT * FROM table WHERE container = '[CONTAINER_NAME]';
然后我有一个 cronjob 脚本,它每小时运行一次,并使用以下内容从容器中删除旧进程:
DELETE FROM table WHERE TimeCreated <= [SOME_TIME];
所以基本上我喜欢不超过 4-5 小时的进程。看着 Redis,我觉得我可以设计类似的东西来提高我的性能,但是在将这种类似 SQL 的设计转换为 Redis 时遇到了麻烦。
我的第一个想法是使用 HSET,但我发现 HSET 不允许在字段上使用 EXPIRE 命令,因此我无法自动删除旧进程。我最关心的是性能和效率。
【问题讨论】:
-
您是否正在查看 Redis 中两个语句(SELECT 和 DELETE)的等效项?
-
并不完全等同于我认为 get 和 del 命令,但我正在寻找的是一种选择具有相同容器的所有键的有效方法。同样,我想删除所有旧的键。
标签: mysql amazon-web-services redis nosql