当前位置: 首页 > 面试题库 >

阻止访问Redis密钥(ServiceStack)

司徒光霁
2023-03-14
问题内容

我正在尝试使用ServiceStackRedis客户端实现我认为是非常常见的缓存方案,但是我很难找到一个很好的例子。

在ASP.NETMVC应用程序中,我们对外部Web服务进行了相对长时间的运行(按计量),并将结果缓存了一段时间。在高速缓存实现中,希望阻止对该键的其他请求,直到Web服务调用完成为止,以避免其他(昂贵)调用。

那么,实现键级锁定的最佳方法是什么?Redis开箱即用吗?ServiceStack的IRedisClient.AcquireLock是否适合于此,或者如果我们不处理分布式锁,那是否会过大?还是我最好自己自己实施锁,就像这里描述的那样?

提前致谢!


问题答案:

Redis是一个非阻塞异步服务器,在释放 密钥 之前,没有内置的语义可让Redis在客户端连接上进行阻塞。

注意:Redis是一个远程NoSQL数据存储,因此,您实现的涉及Redis的所有锁都将按设计“分布”。ServiceStack的AcquireLock使用redis的原始SETNX 锁定语义来确保只有1个客户端连接具有该锁定,所有其他客户端/连接都将保持阻塞状态,直到使用指数重试退避倍数进行轮询来释放该锁定为止。

为了在不轮询的情况下实现分布式锁,您需要创建一个解决方案,该解决方案结合使用SETNX + redis的发布/订阅支持来通知等待的客户端该锁已被释放。



 类似资料:
  • 我试图编译代码时遇到了这个异常。我已经安装了eclips工具包,我正在使用EclipseKepler 异常线程"main"java.lang.NoClassDefFoundError: org/apache/共用/日志/LogFactory在com.amazonaws.Amazon WebServiceClient.(Amazon WebServiceClient.java:56)在test_to

  • 我正试图从vue.js端访问laravel服务器。但它表明 CORS策略阻止从来源“http://localhost:8000/api/registerdoctor”访问位于“http://localhost:8080”的XMLHttpRequest:请求的资源上没有“Access-Control-Allow-Origin”标头。 怎么办?

  • 是否有一种方法可以使用Delphi访问Azure密钥库?我可以使用柏林的data.cloud.azureapi单元访问数据库和blob存储,但想从密钥库中获取数据库连接字符串,但似乎找不到任何用于此操作的代码。

  • 我正在与Django合作一个项目,该项目通过React前端上的Django Rest框架通过API提供数据。可浏览的API工作正常,但是,react前端在控制台中给出了一个错误。 我已成功安装django cors标头。 CORS策略阻止从http://127.0.0.1:8000/products/http://localhost:3000获取数据:请求的资源上不存在访问控制允许来源标头。如果不

  • 我在Powershell中编写了一个程序,该程序在Azure Functions应用程序中按计划运行。为了避免硬编码的凭据,我创建了一个Azure密钥库来存储秘密。我在Azure函数中创建了一个托管标识,在Azure Key Vault中创建了秘密,然后在Azure函数中创建了应用程序设置,并使用指向Azure Key Vault中秘密的URL。程序引用应用程序机密(APPSETTING),并按照

  • 问题内容: 阻塞VM的整体性能更好,因为同步,线程生成和恢复等待值的阻塞客户端都不会浪费时间。因此,如果您愿意不时接受更高的延迟,则阻塞VM是一个不错的选择。尤其是如果交换很少发生并且大多数经常访问的数据恰好适合您的内存。 这是Redis的默认模式(这是唯一的前进模式,我相信现在2.6中已弃用VM),让OS处理分页(如果需要)。我的理解是正确的,启动/启动将需要一些时间才能变得“热”。当在具有16