@BashkaMen
C# программист

Concurrency в работе с кэшем?

Привет, хочу добится большой производительности в апи.
Сейчас модель проста: Запрос -> в бд -> ответ
И проблем с конкуретностью нет ибо транзакции помогают и доп условие помогает.

Хочу делать все в кеше, и периодически кеш заливать в бд.

Возник вопрос по concurrency.

Вот кейс

2 Потока одновременно хотят сменить баланс юзеру
Оба взяли 1 стейт (100 грн), но какой-то из них первый залил новый стейт (120)
Второй соответственно про это не знает и валит туда свое значение от 100

Когда я планировал это делать я думал буду записывать евенты изменений (ChangeBalance +100) (ChangeBalance +40)
и перед заливкой в бд сагрегировать все в кучу и сохранить.

Но тут та же проблема, коллекция событий в кеше, я тяну коллекцию с кеша добавляю туда event и сохраняю, и тут есть возможность что я затру изменения другого потока.

Как можно решить эту проблему? Хотя бы отменить перезапись кеша, чтоб не терять данные
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
Не специалист по concurrency, однако считаю, что само изменение баланса не стоит выполнять конкурентно.
Думаю, стоит класть задачи по изменению баланса в очередь и чтобы у очереди было множество параллельных обработчиков. Таким образом, за каждое изменения баланса будет отвечать лишь один обработчик.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы