【问题标题】:Redis Data type for storing same values with different scoresRedis 数据类型,用于存储具有不同分数的相同值
【发布时间】:2017-09-25 19:01:47
【问题描述】:

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

我正在考虑在 redis 的 sorted 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

【问题讨论】:

    标签: redis


    【解决方案1】:

    这里的“诀窍”是使成员唯一,最简单的方法是将结果和时间戳连接起来,即:

    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,请改用尽可能短的字符串。在您的情况下,而不是“失败”和“成功”,只需使用 0 和 1(或“F”和“S”......),从而为每个成员节省 9 个字节。您也可以在连接额外保存的字节时去掉冒号(“:”),即Ftimestamp1Stimestamp2 等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-11
      • 2019-09-03
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多