Очищает ли Django Cache после истечения срока действия - PullRequest
0 голосов
/ 08 сентября 2018

В настоящее время я работаю с 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 голосов
/ 08 сентября 2018

Вот упрощенная версия вашего кода (всего 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...