Правильное создание корзины на PHP
бьюсь уже долгое время как правильно сделать корзину на php.
По задумке должно быть так: если пользователь авторизован, то корзина должна сохраняться в базу и должна быть доступна при следующем входе, если гость то корзина на сессиях.
Так вот, вроде ничего сложного, но слишком много запросов к базе это плохо для авторизованного пользователя и хочется сразу сделать качественно и красиво, по-правильному. Думал сделать через паттерн компоновщик где у меня отдельные классы обрабатывают по отдельности каждый вид сохранения в корзину: SessionCart, DbCart, SessionDbCart и тд. В таком случае для гостя вызывается SessionCart, а для авторизованного пользователя SessionDbCart, чтобы корзина сохранялась и в сессии и в базу. Но как тогда сделать синхронизацию сессии и базы при авторизации пользователя? И тогда получается тоже много запросов на базу. Думал так: чтоб при закрытии пользователем страницы корзина из сессии отправлялась на базу.
В общем мыслей очень много и решил попросить совета у более опытных людей. Думал также над вариантами с memcached и redis, но в них очень слаб и не до конца понимаю область их применения. Изначально "вдохновлялся" корзиной с озона.