【问题标题】:Is there any lock mechanism in Azure Redis Cache while updating an item?更新项目时 Azure Redis 缓存中是否有任何锁定机制?
【发布时间】:2015-12-02 22:11:57
【问题描述】:

我正在使用 Azure 搜索处理 Azure Redis 缓存,但我找不到任何关于 Redis 缓存并发的明确描述。

情况就是这样。在覆盖现有缓存项目时,是否可以同时读取该项目?如果是,Redis Cache 如何管理这个?它会锁定项目直到它可用还是提供旧版本的项目?

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

【问题讨论】:

    标签: azure caching redis stackexchange.redis azure-redis-cache


    【解决方案1】:

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

    【讨论】:

    • 我从你的回答中了解到,有一个锁定机制。 Redis Cache 等待获取请求,直到更新完成。那么我应该使用 StringGetAsync 还是 StringGet 来等待更新?
    • 他们都对 Redis 执行相同的操作,异步版本在得到答案之前返回到您的代码,而另一个让它等待它。
    • Redis 中只有一个线程服务于传入的请求,所以它不能服务于 2 个并发请求。所以它不需要任何锁定机制。使用 StringGetAsync 或 StringGet 对 Redis 端没有影响,只是你的客户端会在异步方法中等待响应或不响应而被阻塞。
    • 没有锁定 - 可能的情况,客户端的 valueFactory 被多次调用
    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2021-03-10
    • 2014-07-01
    相关资源
    最近更新 更多