mongodb — параллельные соединения с PHP + Redis при высокой нагрузке

Есть ли какой-то механизм для работы с данными в высоком параллелизме?

Сначала мы использовали mongodb, и он решает проблему с помощью атомарных обновлений. Но обновляет частоту примерно до 1000 \ секунд, и мы настраиваем Redis, чтобы помочь монго и синхронизации между ними. Это работает хорошо, но у нас есть проблема согласованности с Redis.

Например:

  1. Первый запрос пришел в 0,01 мс — процесс завершился в 0,04 мс
  2. Второй запрос пришел в 0.02ms и завершился в 0.03s.

Оба запроса получают один и тот же объект? измените данные и сохраните их при выходе.

Когда мы использовали mongodb — мы можем сделать — частичные обновления объекта, но с помощью redis — мы не можем.

Можно ли манипулировать одним и тем же объектом (данными) из нескольких процессов одновременно и не перезаписать его целиком — только часть?

Единственный способ, которым я нахожу — создать механизм блокировки и ждать, пока он существует, прежде чем получить его во второй раз.

0

Решение

Redis не имеет такой механизм (частичное обновление), как вы хотите,
но в качестве альтернативы,
Вы можете написать сценарии Lua, чтобы избежать проблем с параллелизмом.

В сценарии
Вы можете сначала прочитать значение, манипулировать им, как хотите, и, наконец, снова сохранить значение.
Redis гарантирует, что скрипт будет выполняться атомарно,
так что вам не нужен механизм блокировки с этим сценарием. (*)

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector