2013-03-25 3 views
1

Я использую функцию сеанса ServiceStack (в это с помощью кэширования памяти), и я пытаюсь получить доступ к ключу в объекте сеанса, изменить его, а затем сохранить сессию:ServiceStack Кэширование/Session блокировки

var filesList = Session.Get<List<string>>("NewRequestUploadedFiles"); 
filesList.Add(fileName); 
Session["NewRequestUploadedFiles"] = filesList; 

Это код можно вызывать параллельно через несколько одновременных запросов от клиента, поэтому требуется блокировка этого ключа. Есть ли какой-либо встроенный способ добиться блокировки на ISession?

На данный момент я использую кеширование памяти, но в будущем я хотел бы изменить поставщика кеширования на Redis, поэтому, если есть какой-то общий способ, это предпочтительнее.

Заранее спасибо.

+0

Возможно, вы захотите использовать встроенную блокировку. См. Http://stackoverflow.com/a/8096551/215502 – kampsj

ответ

1

Вы должны использовать ServiceStack's typed sessions, поскольку записи являются атомарными.

В противном случае, если вы хотите, вы можете поддерживать distributed locks with Redis. Если это всего лишь один хост в памяти, вы можете просто использовать семантику стандартной семантики C#.

+0

спасибо. Я заинтересован в блокировке операций чтения + записи. не только для записи. поэтому я думаю, что C# lock будет решением для одного хоста в памяти, а Redis.AcquireLock будет решением в будущем, когда я перейду на несколько веб-серверов. Я просто надеялся, что можно будет написать общий код, который мне не нужно будет переписывать, когда я перееду на Redis. – Edi

Смежные вопросы