Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 10, 2019 00:38:57

m0nte-cr1st0
Зарегистрирован: 2019-02-03
Сообщения: 49
Репутация: +  2  -
Профиль   Отправить e-mail  

Проверка "лёгкого" и "тяжёлого" кеша

В проекте есть 2 кеша: 1 - дефолтный (легкий), используется через redis; 2 - “тяжёлый”.

 CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    'heavylift': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(BASE_DIR, 'django_cache'),
    }
}



Задача в следующем. Для “легкого” кеша изначально нужно указать флаг, что мол “Идёт подготовка данных”.
Так вот, нужно, чтобы вьюху проверяла, если “подготовка данных не идёт” (если кеш пуст) - проверять “тяжёлый” кеш. Если и он пуст, запускать асинхронную задачу.
Если же кеш не пуст, то просто прекращать работу функции.
TTL = 60 минут.

Вот, до какого алгоритма пришёл, но что-то мне подсказывает, что это совсем не то. Подправьте, пожалуйста, кто знает. А то в интернете толковый пример сложно найти.

 @cache_page(60 * 60)
def user_data_view(request):
    cache1 = caches['default']                         #Прирывниваем легкий кеш к cache1
    cache2 = caches['heavylift']                       #Прирывниваем тяжёлый кеш к cache2
 
    cache1.set('my_key', 'Идёт подготовка данных') #Получаем данные из "легкого" кеша, или None (если он пуст)
    if cache1.get('my_key', None) == None:      #Если "легкий" кеш пуст, проверяем heavylift
 
        #Получаем данные из "тяжёлого" кеша, или None (если он пуст)
        if cache2.get('heavylift', None) == None: #Если "тяжёлый" кеш пуст, запускаем асинхронную задачу. Что если он не пуст?
 
           #Запуск асинхронной задачи
 
    else:                                                      #Если "легкий" кеш не пуст - прекращаем работу
        return

P.S. Django 1.11, Python 2.7.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version