【问题标题】:Merge 2 cache entries into one将 2 个缓存条目合并为一个
【发布时间】:2019-09-07 01:01:54
【问题描述】:

我正在缓存一些发票,但有 2 个缓存条目。如果发票缓存存在或不存在,则保留第一个缓存条目。我为什么要这样做?因为有一个业务逻辑(get_cache_timeout 方法)告诉我何时更新保存实际发票详细信息的第二个缓存条目。 所以,第一个是我了解第二个缓存条目是否存在的标志。如果没有,我会调用后端系统并更新第一个和第二个缓存条目。

拥有 60 天的第二个缓存键的原因是,在最坏的情况下,如果第一个条目不存在然后调用后端系统失败,我仍希望返回第二个缓存条目作为响应而不是显示错误。

cache.set(f'{invoices}_cache_exists', True, get_cache_timeout())
cache.set(f'{invoices}_cache', some_cache, 60*60*24*60)

抱歉,解释的混乱,但我希望你明白这个解决方案背后的想法。

所以,最后我的问题是,对于这个问题,我怎样才能摆脱第一个缓存条目并且只有第二个缓存条目有 2 个超时?第一个告诉我何时更新,第二个是删除缓存。

【问题讨论】:

    标签: django caching redis


    【解决方案1】:

    这个呢?

    #cache.set(f'{invoices}_cache_exists', True, get_cache_timeout())
    cache.set(f'{invoices}_cache', some_cache, get_cache_timeout())
    

    你可以让你的缓存在get_cache_timeout()时间过期。

    最后,如果缓存条目过期,它需要更新,所以知道when to update 解决了。

    在订单手上,when to remove,嗯,它将每get_cache_timeout() 秒/分钟删除一次。

    让缓存条目的 TTL 为 M min 并且必须每隔 m min 更新一次,其中 M > n

    【讨论】:

    • 已经存在,但请考虑一下这种情况。 get_cache_timeout 返回 30 天,30 天后我调用我的 API,我的 API 依赖于另一个 API。但是该 API 没有响应,因此我无法从缓存中提供数据,也无法设置新的缓存。但是,在这种情况下,我只想提供需要在 Redis 上保存 60 天的缓存,因为即使最新的发票也不存在,这也比向用户提供一些数据总比什么都不提供要好。
    • 您的问题听起来像是您需要将数据从另一个 API 导入您的数据库。如果其他 API 没有响应回退到您的数据库,如果 API 确实响应,则更新缓存和您的数据库数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2020-06-11
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多