Redis ハッシュ統計は、24 時間以内および 1 時間以内のデータ蓄積変更の合計を監視します

1 時間以内の統計データは 1 分ごとに 60 セグメントに分割され、識別フィールドには %Y%m%d%H が使用されます。
Redis Hashは、1時間以内の1分ごとの統計データを初期化して記録し、
同じ時間内かどうかを判断し、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

分と同様に、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

おすすめ

転載: blog.csdn.net/abc564643122/article/details/115654173