Django缓存在到期后会自行清除吗

时间:2018-09-08 15:47:16

标签: django caching memcached

我目前正在与Memcache和Django一起使用,以缓存从外部API请求的数据,因此我不会压倒它们的服务器。目前,我的代码如下:

# CACHE CURRENT PRICE
cache_key_price = str(stock.id)+'_price' # needs to be unique
cache_key_change = str(stock.id)+'_change'
cache_keychange_pct = str(stock.id)+'_changePct'

cache_time = 60 * 5 # time in seconds for cache to be valid
price_data = cache.get(cache_key_price) # returns None if no key-value pair
change_data = cache.get(cache_key_change) # returns None if no key-value pair
changePct_data = cache.get(cache_keychange_pct) # returns None if no key-value pair

if not price_data:
    delayed_price, change, changePct = get_quote(stock.ticker)

    price_data = delayed_price
    change_data = change
    changePct_data = changePct

cache.set(cache_key_price, price_data, cache_time)
cache.set(cache_key_change, change_data, cache_time)
cache.set(cache_keychange_pct, changePct_data, cache_time)

context_dict['delayed_price'] = cache.get(cache_key_price)
context_dict['change'] = cache.get(cache_key_change)
context_dict['changePct'] = cache.get(cache_keychange_pct)

我对缓存有点陌生,我很好奇,如果5分钟后缓存将清除自身,并且data将返回None,从而触发if not data:位代码以获取更新的数据。

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是代码的简化版本(仅带1个键,而不是全部3个键);您可以扩展它以满足您的需求。

我做了2处更改:首先,语句cache.set(..)必须位于if not price_data:块内,以便仅在缓存为空(或过期)时运行。

第二,您应该使用变量price_data来加载到上下文中;因此您无需第二次致电cache.get(..)

cache_key_price = str(stock.id)+'_price' # needs to be unique
cache_time = 60 * 5 # time in seconds for cache to be valid
price_data = cache.get(cache_key_price) # returns None if no key-value pair

if not price_data:
    delayed_price, change, changePct = get_quote(stock.ticker)
    price_data = delayed_price
    cache.set(cache_key_price, price_data, cache_time)

context_dict['delayed_price'] = price_data