2015-09-07 72 views
3

我正在使用Azure搜索Azure Redis缓存,但找不到有关Redis缓存并发的任何明确说明。更新项目时,Azure Redis缓存中是否存在任何锁定机制?

这是这种情况。在覆盖现有缓存项目的同时,是否可以在相同的时间读取该项目?如果是,Redis Cache如何管理这个?它是否锁定物品直至其可用,或者它是否给出旧物品的版本?

顺便说一下,我使用StackExchange.Redis客户端。

回答

5

Redis是单线程的,所以所有操作都是原子操作。如果有更新/删除,则在操作完成之前,没有其他人可以读取该密钥。更多细节在这里 - single-threaded-nature-of-redis

+0

据我的理解你的答案,有一个锁定机制。 Redis缓存等待获取请求,直到更新完成。那么我应该使用StringGetAsync还是StringGet来等待更新? –

+0

它们都对Redis执行相同的操作,在获取答案之前,异步版本返回到您的代码,而另一个则使其等待它。 –

+0

Redis中只有一个线程为传入请求提供服务,因此它不能提供2个并发请求。所以它不需要任何锁定机制。使用StringGetAsync或StringGet对Redis端没有任何影响,只是您的客户端将通过等待响应或不在异步方法中被阻止。 –