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

Я работаю над кэшем Redis для Azure с поиском Azure, но мне не удалось найти четкого описания параллелизма кэша Redis.

Вот такой случай. Можно ли при перезаписи существующего элемента кеша прочитать этот элемент в одно и то же время? Если да, то как Redis Cache с этим справляется? Блокирует ли элемент до тех пор, пока он не станет доступным, или выдает старую версию элемента?

Кстати, я использую клиент StackExchange.Redis.


person Can Atuf Kansu    schedule 07.09.2015    source источник


Ответы (1)


Redis является однопоточным, поэтому все операции атомарны. Если есть обновление / удаление, никто другой не сможет прочитать этот ключ, пока операция не завершится. Подробнее здесь - однопоточный-природа-повторения.

person Liviu Costea    schedule 07.09.2015
comment
Как я понял из вашего ответа, есть механизм блокировки. Redis Cache ожидает получения запроса до завершения обновления. Итак, следует ли мне использовать StringGetAsync или StringGet, чтобы иметь возможность ждать обновления? - person Can Atuf Kansu; 07.09.2015
comment
Они оба выполняют одну и ту же операцию с Redis: асинхронная версия возвращается к вашему коду до получения ответа, тогда как другая заставляет его ждать. - person Itamar Haber; 07.09.2015
comment
В Redis есть только один поток, который обслуживает входящие запросы, поэтому он не может обслуживать 2 одновременных запроса. Таким образом, ему не нужен запорный механизм. Использование StringGetAsync или StringGet не влияет на сторону Redis, только ваш клиент будет заблокирован, ожидая ответа или не ожидая ответа в методе async. - person Liviu Costea; 07.09.2015
comment
Без блокировки - возможная ситуация, когда valueFactory на стороне клиента вызывается несколько раз - person ZOXEXIVO; 01.08.2018