Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Кто-нибудь сталкивался?
Есть у кого готовые наметки?
Вообще нужно решение для следующего, может кто подскажет.
Клиент отправляет на серв 10 ajax'ов, каждый хочет что то дописать в кэш.
Но т.к. скорость выполнения запроса отличается не сильно, очень часто часть инфы переписывает друг друга.
Посоветуете что нить?
Последовательные запросы не эффективные из-за тупого бэкэнда.
Файловый кэш так же не эффективен из-за большой нагрузки на сервер.
Не в сети
они прямо в один ключ пишут? если там сложная структура данных, её лучше разнести по разным ключам, так чтобы разные запросы не пересекались.
Не в сети
Структура данных - json
Ну если на пальцах то смысл запросов таков:
есть например несколько товаров, вот по ним я делаю запросы.
products.forEach(function(product){
writeInfo(product.name,product.val);
});
function writeInfo(pName, pVal){
$.ajax({
url: 'some.php',
data: {name:pName, val:pVal},
success: callback
});
};
, а на серве записываю для каждого запроса.
Session::put('key_'.Input::get('name'), Input::get('val'));
Вот если взять
Session::get('key_name1');
, то он видит, т.е. записывается все, но если брать после выполнения всех запросов, уже видит только один,
судя по всему, последний выполнившийся.
Не в сети
ну вообще это очень неоптимально. по идее some.php должен принимать сразу массив пар name=>value и выполнять групповую операцию на одном обращении. а если нужна атомарность операций — надо использовать базу.
кроме того, так уж получилось, что я прямо сейчас делаю корзину с товарами по своему проекту — я собственно храню все данные в cart_items строками вида id,cart_code,product_id,quantity. при этом cart_code берётся из сессии. Сессия устарела — корзина самоуничтожилась. (на самом деле конечно у меня просто по крону чистится содержимое cart_items для удаления старых корзин). сформировался новый заказ — перенесли данные в orders, а cart_code удалили из сессии — опять новая корзинка.
если делаешь что-то подобное, сессия — идеальное хранилище для короткоживущих данных.
Не в сети
Ну нет, далеко не подобное, это просто аналогичный пример был.
Вообще вот смысл того, что я хочу конкретная задача:
Выполнить одновременно не более 14 запросов и быстро сохранить полученный результат.
Вот собственно и вопрос куда и как.
Ну куда понятно - в сессию.
А вот как?
file - не катит была такая реализация до сего момента, нагрузка высокая, поэтому ОЧЕНЬ сильно падает производительность именно поиска-чтения-записи.
memcached и redis подходит, но трут свои же записи.
Вот как реализовать хз....
Да и еще...
Можно ли в процессе работы использовать и file и memcached сессию?
Ну т.е. как то динамично менять драйвер?
Изменено sepgg (26.03.2015 14:09:36)
Не в сети
ещё раз — если нужна атомарность операций — надо хранить данные в базе данных, использовать таблицы, связи, транзакции и блокировки (в eloquent — PHPlockForUpdate()
на выборке внутри транзакции). все остальные методы не обеспечат требуемых условий. даже если хранить сессии в базе — всё равно сессия сериализуется в неё целиком, то есть кто последний сохранил в неё данные — те данные и будут в ней присутствовать. если же переписать драйвер database сессии так чтобы он блокировал сессию в транзакции — получится то же самое последовательное выполнение запросов, от которого ты хочешь уйти.
Не в сети
Страницы 1