Может ли сервер Python кешировать дБ-запросы между рабочими Apache? - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь ускорить домашнюю страницу веб-сайта, который запрашивает в базе данных случайный URL-адрес для использования в качестве фонового изображения. Одна вещь, которую я попробовал, это добавить функцию в код Python, которая кеширует результат этого запроса к базе данных в течение 60 минут, и когда я запускаю сервер локально, я вижу, что он, кажется, работает правильно: перезагрузка страницы показывает то же изображение, что и в предыдущий раз вместо нового случайного изображения.

Однако, когда я развернул этот код на капле Digital Ocean, работающей на сервере Apache, он, похоже, не работал: перезагрузка страницы показала бы другое изображение. Я подозреваю, что происходит то, что разные работники обрабатывают мой запрос каждый раз, и у каждого из них есть свой кешированный результат из базы данных.

Есть ли способ кешировать эти запросы к базе данных по рабочим или достичь какого-то подобного результата? Примечание: очевидное решение жесткого кодирования фонового изображения не является вариантом, так как человек, для которого я работаю, хочет, чтобы фоновое изображение варьировалось.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

После некоторого прочтения кажется, что стандартным решением этой проблемы является использование системы кэширования db-запросов, такой как Memcached или Redis.

0 голосов
/ 08 сентября 2018

Apache разделил память между рабочими, но я все равно не знаю, чтобы python (скажем, uwsgi) мог получить к нему доступ. То же самое с nginx.

Альтернативой может быть использование алгоритма для определения того, что отображать, а не случайность. Например, все запросы с часом == 1 -> картинка_1, час == 2 -> изображение_2 и т. Д.

...