Недавно я играл с различными поставщиками состояния сеанса для ASP.Net и придумал то, что кажется лучшим (с точки зрения производительности и реализации).
Использование https://github.com/TheCloudlessSky/Harbour.RedisSessionStateStore
Это прекрасно работает и очень просто в реализации. Единственная проблема заключается в том, что он принудительно блокирует запрос, поэтому браузер должен ждать, если запрос открыт. В большинстве случаев это нормально, но когда вы заканчиваете какой-то длительный процесс, и пользователь хочет сдаться, пользователь остается висящим до тех пор, пока длительный процесс не завершится.
Теперь - это можно решить, сняв блокировку с провайдера. Это так же просто, как изменить строки, где lock = true, на lock = false, и изменить обновление, чтобы оно не обращало внимания на «&& state.Locked && state.LockId == lockId»
Паника! Ясно, что это противоречит тому, как предполагалось состояние сеанса, и с точки зрения безопасности потоков это пугающая перспектива. Но… на многих сайтах, которые мы создали, состояние сеанса редко используется для чего-то более сложного, чем «какой идентификатор пользователя активен в данный момент» — что пишется очень редко. Его можно использовать для передачи (больших) данных между двумя страницами, а также для сохранения нечетных настроек. ... во многих случаях потокобезопасность редко будет проблемой, так стоит ли компромисс с производительностью или стоит ли снимать блокировку и рисковать, чтобы получить значительно более отзывчивый сайт?