0

假设我希望用户每天完成一个动作,所以我跟踪 acurrent_streaklongest_streak

current_streak = get_current_streak(user_id)
longest_streak = get_longest_streak(user_id)

longest_streak我没有在用户每次请求时重新计算它,而是无限期地缓存它,并且只有当我看到current_streak超过longest_streak

@cache.memoize(timeout=99999)
def _get_longest_streak(user_id: int) -> int:
    pass

def get_longest_streak(user_id: int) -> int:
    current_streak = get_current_streak(user_id)
    longest_streak = _get_longest_streak(user_id)

    if current_streak > longest_streak:
        cache.delete_memoized(_get_longest_streak, user_id)
        return _get_longest_streak(user_id)
    
    return longest_streak

但似乎我可以通过以下方式更有效地做到这一点:

def get_longest_streak(user_id: int) -> int:
    current_streak = get_current_streak(user_id)
    longest_streak = _get_longest_streak(user_id)

    if current_streak > longest_streak:
        cache.replace_memoized(_get_longest_streak, user_id, current_streak) # <--
        return _get_longest_streak(user_id)
    
    return longest_streak

可能吗?值得吗?还是我在寻找不必要的优化?

4

0 回答 0