3
我正在使用Azure搜索Azure Redis緩存,但找不到有關Redis緩存併發的任何明確說明。更新項目時,Azure Redis緩存中是否存在任何鎖定機制?
這是這種情況。在覆蓋現有緩存項目的同時,是否可以在相同的時間讀取該項目?如果是,Redis Cache如何管理這個?它是否鎖定物品直至其可用,或者它是否給出舊物品的版本?
順便說一下,我使用StackExchange.Redis客戶端。
我正在使用Azure搜索Azure Redis緩存,但找不到有關Redis緩存併發的任何明確說明。更新項目時,Azure Redis緩存中是否存在任何鎖定機制?
這是這種情況。在覆蓋現有緩存項目的同時,是否可以在相同的時間讀取該項目?如果是,Redis Cache如何管理這個?它是否鎖定物品直至其可用,或者它是否給出舊物品的版本?
順便說一下,我使用StackExchange.Redis客戶端。
Redis是單線程的,所以所有操作都是原子操作。如果有更新/刪除,則在操作完成之前,沒有其他人可以讀取該密鑰。更多細節在這裏 - single-threaded-nature-of-redis
據我的理解你的答案,有一個鎖定機制。 Redis緩存等待獲取請求,直到更新完成。那麼我應該使用StringGetAsync還是StringGet來等待更新? –
它們都對Redis執行相同的操作,在獲取答案之前,異步版本返回到您的代碼,而另一個則使其等待它。 –
Redis中只有一個線程爲傳入請求提供服務,因此它不能提供2個併發請求。所以它不需要任何鎖定機制。使用StringGetAsync或StringGet對Redis端沒有任何影響,只是您的客戶端將通過等待響應或不在異步方法中被阻止。 –