假设我希望用户每天完成一个动作,所以我跟踪 acurrent_streak
和longest_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
可能吗?值得吗?还是我在寻找不必要的优化?