问题标签 [stackexchange.redis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 使用 StackExchange.Redis 处理故障转移
我正在寻找对我的方法的验证,以及如果我遗漏了什么的指针。
我的应用有 2 个 redis 连接多路复用器,一个用于 redis 实例,一个用于哨兵。
在启动时,我连接到一个已知的哨兵地址并查询它的主机,然后查询它的从机。
然后,我使用这些发现的服务器创建“服务器”连接,并订阅哨兵上的 +master-switch 和 +promoted-slave 频道。
如果偶数从这些通道中的任何一个到达,我只需再次执行上述发现过程,替换连接多路复用器。
现在,我是在重新发明 SE.Redis 已经处理的一些功能,还是我遗漏了什么?
谢谢!
c# - 使用 StackExchange.Redis 循环发布/订阅
我知道redis本身不支持向客户端循环分发消息。但我想知道是否可以通过 StackExchange.Redis 做些什么来实现这一点?
换句话说:我不想将消息发布到频道以在订阅客户端之间均匀分布。
我想我可以轮询一个阻止列表弹出?还是订阅频道(用于阻止)然后从列表中正确弹出工作更好?
谢谢, Bj
task-parallel-library - StackExchange.Redis 死锁
我StackExchange.Redis
在我的 Nancy 应用程序中使用(SE.R)。ConnectionMultiplexer
Nancy 通过构造函数参数自动传递了一个全局变量TinyIoC
,并且任何时候我尝试使用GetDatabase
其中一种*Async
方法(同步方法仅在尝试了其中一种异步方法后才开始失败)我的应用程序死锁。
查看我的并行堆栈,我似乎有四个线程:
- 调用
Result
我的一个使用 SE.R 的任务的线程。(堆栈上有很多 Nancy 的东西,然后调用我使用 SE.R 的库,然后调用Result
. 堆栈的顶部是Monitor.Wait
)。 - 产生另外两个线程的线程。我认为这是由 SE.R. 管理的。以
Native to Managed Transition
,开头ThreadHelper.ThreadStart
,栈顶是ThreadHelper.ThreadStart_Context
. - 像这样卡住的小堆栈:
Monitor.Wait
Monitor.Wait
SocketManager.WriteAllQueues
SocketManager.cctor.AnonymousMethod__16
- 另一个看起来像这样的小堆栈:
Managed to Native Transition
SocketManager.ReadImpl
SocketManager.Read
SocketManager.cctor.AnonymousMethod__19
我几乎可以肯定这是某种僵局。我什至认为这可能与这个问题有关。但我不知道该怎么办。
使用以下代码ConnectionMultiplexer
在 Nancy 中设置:IRegistrations
mux
是由在其构造函数参数列表中请求它的所有代码共享的实例。
我有一堂课叫SchemaCache
. 其中一小部分(包括引发相关错误的代码)如下:
我还有一个类在需要缓存中的一些信息的方法中使用它:
以上所有方法在 LinqPad 中都可以正常工作,其中所有问题都只有一个实例。相反,它失败了TimeoutException
(后来出现了关于没有可用连接的异常)。唯一的区别是我通过依赖注入获得了一个缓存实例,而且我很确定 Nancy 使用 Tasks 来并行化请求。
c# - StackExchange.Redis 异步调用挂起
试图弄清楚为什么这段代码会挂起。我可以删除测试底部的 3 行中的任何一个,它不会挂起,但所有 3 行一起使它挂起。任何帮助将不胜感激!
f# - 如何从 F# 调用 Redis StringSet()
我正在使用 StackExchange.Redis 访问 Redis 实例。
我有以下工作 C# 代码:
这是我希望等效的 F# 代码:
但是,这不会编译 - “方法 StringSet 没有重载匹配”。StringSet 方法需要 RedisKey 和 RedisValue 类型的参数,并且 C# 中似乎有一些编译器魔法将调用代码中的字符串转换为 RedisKey 和 RedisValue。F# 中似乎不存在这种魔法。有没有办法达到相同的结果?
c# - 在 Redis 中存储对象的集合
我想在 Redis 中存储复杂 c# 类的集合 这个集合有两种用法:
- 首先从集合中检索所有对象
其次是通过 id 从集合中检索特定项目
- 存储此类数据的最佳 Redis 类型是什么?
- 将 c# 对象作为字节数组存储在 Redis String 中是否可以,并且当我需要将此数据反序列化到我的集合时?,如果此数据使用率很高。
对于 c# 的缓存数据,是否存在更好的解决方案?
redis - StackExchange.Redis 中 BookSleeve 中的 Sets.GetAllString() 等价物是什么?
在 BookSleeve 中有一个 connection.Sets.GetAllString() 方法。StackExchange.Redis 中的等价物是什么?
谢谢!
asp.net-mvc - Redis Session State Provider 没有删除 Session Abandon 上的键
我使用此过程将会话状态存储在 Azure Redis 缓存中。
NuGet RedisSessionStateProvider将您的会话状态保存在 Redis 中,您可以像在 Proc Session 中一样管理它。
当用户登录时,我做了这样的事情:
会话值在应用程序中始终可用。如果你查看你的 REDIS 缓存,你会看到这两个键snurztvlyl2jk5wnzstjikln_Internal
snurztvlyl2jk5wnzstjikln_Data
在哪里 snurztvlyl2jk5wnzstjikln
是 SessionID。
当我注销时:
用户 SignOut 但如果我查看 redis 缓存,值仍然存在。它们不会被删除,只会在会话超时后被删除。我也尝试过Session.Clear()
,Redis 缓存中的键仍然存在。
为什么没有删除密钥或我做错了什么?
更新我创建了一个公共回购来重现这个问题 https://github.com/ricardopolo/RedisIssue
redis - 如何将 StackExchange.Redis ConnectionMultiplexer 与 SignalR.Redis (2.2) 一起使用
目前 SignalR.Redis 正在使用 Booksleeve。
但是,SignalR.Redis 现在已迁移到 StackExchange.Redis,而不是 signalR.Redis(2.2 开发分支)中的 Booksleave。
升级到 2.2 后,我们仍然可以使用相同的代码指定单个 Redis 服务器:
GlobalHost.DependencyResolver.UseRedis("localhost", 6379, string.Empty, "myApp");
但是,我现在想知道如何使用 ConnectionMultiplexer(可在 StackExchange.Redis 中获得)使用 SignalR.Redis 指定多个服务器(而不是仅指定一个服务器)。
这里的答案:使用 SignalR 和 Redis 消息总线故障转移,使用 BookSleeve 的 ConnectionUtils.Connect()使我朝着正确的方向前进,但是我对如何实现它感到困惑。
很感谢任何形式的帮助。
c# - Redis Cache 同步请求超时,异步请求响应缓慢,仅在异步方法中
首先,我将 Azure Redis 缓存服务和 StackExchange.Redis(1.0.371) 客户端与我的 MVC 5 和 Web Api 2 应用程序一起使用。我得到了非常有趣的行为。当我使用异步转换同步调用时,同步请求超时,响应缓慢。让我给你举个例子。这是我的 RedisCacheService,
这是我调用缓存的方法。
上面的方法总是给我,
或者
让我们将其更改为异步,
上述方法有效,但至少需要 5-10 秒。我的意思是如果没有可用的缓存则为 10 秒,如果缓存可用则为 5 秒。
现在让我的方法完全同步,
请注意调用存储库方法的注释。上述方法立即生效,意味着我在不到 1 秒的时间内得到结果。Azure 或 StackExcahge.Redis 客户端显然有问题。
更新:我的最后一种方法(异步)也很有效(快速且没有错误),
请注意,我仍然评论了存储库代码。