Тайм-аут базы данных Django - сделать бэкэнд удалить строку - PullRequest
0 голосов
/ 12 ноября 2018

Я не уверен, что кэш базы данных Django делает с просроченными записями, но кажется, что они остаются в базе данных.

Я хочу Django удалить их после истечения срока их действия, потому что их размер огромен и может быть неограниченное количество различных ключей.

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'cache_table',
        'TIMEOUT': 60 * 20,
    }
}

Я использую cache в отфильтрованном списке объектов, и этот фильтр содержит числа и поля символов.

Возможно ли это?

1 Ответ

0 голосов
/ 12 ноября 2018

Невозможно удалить записи с истекшим сроком действия, так как срок их действия истек. Это одна из многих причин, по которой вы, вероятно, не хотите использовать кеш базы данных в работе!

Если возможно, вам следует переключиться на другой бэкэнд кеша (я предпочитаю Redis). Если вы не можете, у вас есть несколько других вариантов:

  1. Если вам известны ключи кеша, которые вы хотите очистить, вы можете использовать низкоуровневый API кеша для непосредственного удаления ключей, которые вы хотите очистить.

  2. Вы можете настроить MAX_ENTRIES и / или CULL_FREQUENCY аргументы кэша , чтобы ограничить общий размер кэша.

  3. Вы можете напрямую войти в базу данных (возможно, из фоновой задачи или задачи cron), вручную запустив какой-нибудь SQL, например DELETE FROM cache_table WHERE expires < now() (я не проверял это, но думаю, что он должен работать).

...