Я реализовал пессимистическую блокировку в своем приложении CakePHP, совместно используемом разными контроллерами. По сути, при доступе к странице в таблицу записывается запись, указывающая, что эта запись этой модели редактируется этим пользователем, с отметкой времени. Каждые 30 секунд при вызове ajax эта временная метка этой записи обновляется, указывая на то, что страница все еще используется. Если кто-то попытается войти на страницу, доступ будет запрещен. Если страница оставлена, «блокировка» истекает по истечении этих 30 секунд.
В общем, запрос:
- 3 при загрузке страницы (очистить все блокировки старше 1 часа (DELETE), проверить, не используется ли страница (SELECT), и если нет, создать блокировку (INSERT));
- 2 при обновлении блокировки (проверьте, не заблокирована ли страница (SELECT); если это не так, обновите временную метку блокировки (UPDATE));
Мне интересно, следует ли мне использовать систему Cache, поскольку это не постоянное хранилище данных (которое, очевидно, должно использовать базу данных), а просто что-то временное. Может ли это быть быстрее, чем база данных? (но я не уверен, так как мой кеш - это просто файловый кеш).