当前位置:   article > 正文

Redis Hash统计监控24小时内 和 1小时内数据累加变化总和_redis 位图统计近一个小时

redis 位图统计近一个小时

一个小时内分统计数据 按 分钟分60段 + 一个 标识字段 使用了 %Y%m%d%H。
redis Hash 初始化记录 一小时内每分钟的统计数据
判断 是否在同个小时, 非同个小时内直接hset覆盖掉之前的数据, 如果是同个小时内 使用hincrby累加对应分钟的数量
通过 hvals 计算总和

"""
  key :  redis key 
  inc_value : 累加的数量
"""
def get_report_num_by_hour(key, inc_value):
    hour, minute = time.strftime("%Y%m%d%H-%M").split("-")
        hash_key = RedisUtil.exists(name=key)
        # 是否存在
        if hash_key:
            # 是否为同个小时内
            if hour == RedisUtil.hget(key, 'hour'):
                # 对应分钟 累加对应的数量
                RedisUtil.hincrby(key, int(minute), inc_value)
            else:
                # 非同个小时直接重新设置小时为新的数量
                RedisUtil.hset(key, int(minute), inc_value)
        else:
            # 初始化一小时
            hash_value = {}
            for x in range(61):
                if x == 60:
                    # 记录当时
                    hash_value['hour'] = hour
                else:
                    hash_value[x] = 0
            RedisUtil.hmset(key, hash_value)
            # 对应分钟加1
            RedisUtil.hincrby(key, int(minute), inc_value)
        RedisUtil.expire(key=key, time=3600)
        # 获取所有值
        hash_list = CacheUtil.hvals(key)
        last_index = len(hash_list) - 1
        total_num = 0
        for k, v in enumerate(hash_list):
            if k != last_index:  # 去除最后一位的标识
                total_num += int(v)
        return total_num
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

与分钟类似 , 24小时内分统计数据 按 小时分成24段 + 一个 标识字段 使用了 %Y%m%d。
redis Hash 初始化记录 24小时内每小时的统计数据
判断 是否在同一天, 非同一天内直接hset覆盖掉之前的数据, 如果是同一天内 使用hincrby累加对应小时的数量
通过 hvals 计算总和

    def get_report_num_by_day(key, inc_value=1):
        d, h = time.strftime("%Y%m%d-%H").split("-")
        hash_key = RedisUtil.exists(name=key)
        # 是否存在
        if hash_key:
            # 是否为当天
            if d == RedisUtil.hget(key, 'day'):
                # 对应小时+1
                RedisUtil.hincrby(key, int(h), inc_value)
            else:
                # 非当天直接重新设置小时为+1
                RedisUtil.hset(key, int(h), inc_value)
        else:
            # 初始化24小时
            hash_value = {}
            for x in range(25):
                if x == 24:
                    # 记录当日
                    hash_value['day'] = d
                else:
                    hash_value[x] = 0
            RedisUtil.hmset(key, hash_value)
            # 对应小时加1
            RedisUtil.hincrby(key, int(h), inc_value)
        RedisUtil.expire(key=key, time=86400)
        # 获取所有值
        hash_list = CacheUtil.hvals(key)
        last_index = len(hash_list) - 1
        total_num = 0
        for k, v in enumerate(hash_list):
            if k != last_index:  # 去除最后一位的标识
                total_num += int(v)
        return total_num
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/353128
推荐阅读
相关标签
  

闽ICP备14008679号