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

阻止访问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),并按照

  • 我得到的错误是“Access Denied”,这(我认为)意味着id、secret和Vault的url没有问题。但是,我不知道我可以做什么来修复这个错误,也许在Azure门户中有一个设置阻止我读取一个秘密?