Django缓存过期后会自行清除吗
Does Django Cache Clear Itself After Expiration
我目前正在使用 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
将 return None 触发 if not data:
获取更新数据的代码。
在此先感谢您的帮助!
这是您的代码的简化版本(只有 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
我目前正在使用 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
将 return None 触发 if not data:
获取更新数据的代码。
在此先感谢您的帮助!
这是您的代码的简化版本(只有 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