Redis数据类型,用于存储具有不同分数的相同值

时间:2017-09-25 06:54:45

标签: redis

场景是:当我运行测试时,如果失败则将时间戳和失败值存储在redis中并获取相同测试的最后三个时间戳和值(如果全部失败)则将电子邮件发送到项目负责人。

我在考虑在redis中添加排序zset中的分数:

zadd Health:TestName timestamp1 "Fail"
zadd Health:TestName timestamp2 "Success"
zadd Health:TestName timestamp3 "Fail"
zadd Health:TestName timestamp4 "Fail"
zadd Health:TestName timestamp5 "Fail"

因此,如果我现在运行测试TestName,如果失败,I get last three timestamps and values and check if all are Fail。如果全部都是失败,则发送电子邮件。但是Zadd不允许我为不同的分数添加相同的值。可能是存储此数据的另一种方式。

请注意。我只能使用redis

1 个答案:

答案 0 :(得分:4)

"技巧"这里是使成员唯一,最简单的方法是连接结果和时间戳,即:

zadd Health:TestName timestamp1 "Fail:timestamp1"
zadd Health:TestName timestamp2 "Success:timestamp2"
zadd Health:TestName timestamp3 "Fail:timestamp3"
zadd Health:TestName timestamp4 "Fail:timestamp4"
zadd Health:TestName timestamp5 "Fail:timestamp5"

然后,在获取成员时,只需忽略后缀。

提示:要保存RAM,请切换到使用尽可能短的字符串。在你的情况下,而不是"失败"和#34;成功"只需使用0和1(或" F"和" S" ...),从而为每个成员节省9个字节。您还可以在连接额外保存的字节时删除冒号(":"),即Ftimestamp1Stimestamp2等等。