gpt4 book ai didi

asp.net-mvc - 阻止访问 Redis key (ServiceStack)

转载 作者:IT王子 更新时间:2023-10-29 06:04:08 25 4
gpt4 key购买 nike

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

在 ASP.NET MVC 应用程序中,我们对外部 Web 服务进行相对长时间运行(和计量)的调用,并将结果缓存一段时间。在缓存实现中,希望在 Web 服务调用完成之前阻止对该键的额外请求,以避免额外的(昂贵的)调用。

那么,实现键级锁的最佳方式是什么? Redis 开箱即用吗? ServiceStack 的 IRedisClient.AcquireLock非常适合这个,或者如果我们不处理分布式锁,它会不会太过分了?或者我最好自己实现锁定,就像描述的那样 here

提前致谢!

最佳答案

Redis 是一个非阻塞异步服务器,在 key 空闲之前,redis 没有内置语义来阻塞客户端连接。

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

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

关于asp.net-mvc - 阻止访问 Redis key (ServiceStack),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14387802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com