MySQL Event Scheduler
Есть проект в котором при заходе юзера(каждого!) на страницу авторизации, а это первая(главная) страница сайта, выполняются запросы к бд:
- на очистку таблицы антибрут которым уже больше 1-го часа
- на очистку таблицы антиспам которым уже больше 1-го часа
- посчитать количество неудачных попыток с этого айпи
- посчитать количество отправленных писем с этого айпи
Хоть это легкие запросы, все же это напрягало, 4 запроса на то, что бы подсовывать капчу, или нет.
Логично что нужно избавится от первых 2 запросов(не зачем каждому юзеру выполнять их). Как решение, ставить скрипт по крону - можно, но оказывается - не нужно.
В бд MySQL есть свой Event Scheduler DAEMON!
1) Включаем MySQL Event Scheduler
SET GLOBAL event_scheduler = 1;
2) Создаем Event-ы
CREATE EVENT antibrut
ON SCHEDULE EVERY 1 HOUR
DO
DELETE FROM _antibrut WHERE logintime < DATE_SUB(NOW(),INTERVAL 1 HOUR)
CREATE EVENT antispam
ON SCHEDULE EVERY 1 HOUR
DO
DELETE FROM _antispam WHERE time < DATE_SUB(NOW(),INTERVAL 1 HOUR)
Дополнительно
Посмотреть Event-ы:
SHOW EVENTS;
Если хотить модифицирывать ваш Event, делать через ALTER, например:
ALTER antibrut
ON SCHEDULE EVERY 5 HOUR
STARTS TIMESTAMP + 3 HOUR
Удалить Event:
DROP EVENT antispam;