问题标签 [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.

0 投票
0 回答
458 浏览

c# - 使用 StackExchange.Redis 处理故障转移

我正在寻找对我的方法的验证,以及如果我遗漏了什么的指针。

我的应用有 2 个 redis 连接多路复用器,一个用于 redis 实例,一个用于哨兵。

在启动时,我连接到一个已知的哨兵地址并查询它的主机,然后查询它的从机。

然后,我使用这些发现的服务器创建“服务器”连接,并订阅哨兵上的 +master-switch 和 +promoted-slave 频道。

如果偶数从这些通道中的任何一个到达,我只需再次执行上述发现过程,替换连接多路复用器。

现在,我是在重新发明 SE.Redis 已经处理的一些功能,还是我遗漏了什么?

谢谢!

0 投票
1 回答
936 浏览

c# - 使用 StackExchange.Redis 循环发布/订阅

我知道redis本身不支持向客户端循环分发消息。但我想知道是否可以通过 StackExchange.Redis 做些什么来实现这一点?

换句话说:我不想将消息发布到频道以在订阅客户端之间均匀分布。

我想我可以轮询一个阻止列表弹出?还是订阅频道(用于阻止)然后从列表中正确弹出工作更好?

谢谢, Bj

0 投票
1 回答
3591 浏览

task-parallel-library - StackExchange.Redis 死锁

StackExchange.Redis在我的 Nancy 应用程序中使用(SE.R)。ConnectionMultiplexerNancy 通过构造函数参数自动传递了一个全局变量TinyIoC,并且任何时候我尝试使用GetDatabase其中一种*Async方法(同步方法仅在尝试了其中一种异步方法后才开始失败)我的应用程序死锁。

查看我的并行堆栈,我似乎有四个线程:

  1. 调用Result我的一个使用 SE.R 的任务的线程。(堆栈上有很多 Nancy 的东西,然后调用我使用 SE.R 的库,然后调用Result. 堆栈的顶部是Monitor.Wait)。
  2. 产生另外两个线程的线程。我认为这是由 SE.R. 管理的。以Native to Managed Transition,开头ThreadHelper.ThreadStart,栈顶是ThreadHelper.ThreadStart_Context.
  3. 像这样卡住的小堆栈:
    • Monitor.Wait
    • Monitor.Wait
    • SocketManager.WriteAllQueues
    • SocketManager.cctor.AnonymousMethod__16
  4. 另一个看起来像这样的小堆栈:
    • Managed to Native Transition
    • SocketManager.ReadImpl
    • SocketManager.Read
    • SocketManager.cctor.AnonymousMethod__19

我几乎可以肯定这是某种僵局。我什至认为这可能与这个问题有关。但我不知道该怎么办。

使用以下代码ConnectionMultiplexer在 Nancy 中设置:IRegistrations

mux是由在其构造函数参数列表中请求它的所有代码共享的实例。

我有一堂课叫SchemaCache. 其中一小部分(包括引发相关错误的代码)如下:

我还有一个类在需要缓存中的一些信息的方法中使用它:

以上所有方法在 LinqPad 中都可以正常工作,其中所有问题都只有一个实例。相反,它失败了TimeoutException(后来出现了关于没有可用连接的异常)。唯一的区别是我通过依赖注入获得了一个缓存实例,而且我很确定 Nancy 使用 Tasks 来并行化请求。

0 投票
1 回答
5494 浏览

c# - StackExchange.Redis 异步调用挂起

试图弄清楚为什么这段代码会挂起。我可以删除测试底部的 3 行中的任何一个,它不会挂起,但所有 3 行一起使它挂起。任何帮助将不胜感激!

0 投票
1 回答
1818 浏览

f# - 如何从 F# 调用 Redis StringSet()

我正在使用 StackExchange.Redis 访问 Redis 实例。

我有以下工作 C# 代码:

这是我希望等效的 F# 代码:

但是,这不会编译 - “方法 StringSet 没有重载匹配”。StringSet 方法需要 RedisKey 和 RedisValue 类型的参数,并且 C# 中似乎有一些编译器魔法将调用代码中的字符串转换为 RedisKey 和 RedisValue。F# 中似乎不存在这种魔法。有没有办法达到相同的结果?

0 投票
1 回答
1883 浏览

c# - 在 Redis 中存储对象的集合

我想在 Redis 中存储复杂 c# 类的集合 这个集合有两种用法:

  • 首先从集合中检索所有对象
  • 其次是通过 id 从集合中检索特定项目

    1. 存储此类数据的最佳 Redis 类型是什么?
    2. 将 c# 对象作为字节数组存储在 Redis String 中是否可以,并且当我需要将此数据反序列化到我的集合时?,如果此数据使用率很高。

对于 c# 的缓存数据,是否存在更好的解决方案?

0 投票
3 回答
140 浏览

redis - StackExchange.Redis 中 BookSleeve 中的 Sets.GetAllString() 等价物是什么?

在 BookSleeve 中有一个 connection.Sets.GetAllString() 方法。StackExchange.Redis 中的等价物是什么?

谢谢!

0 投票
2 回答
3172 浏览

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

0 投票
1 回答
1545 浏览

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()使我朝着正确的方向前进,但是我对如何实现它感到困惑。

很感谢任何形式的帮助。

0 投票
2 回答
4847 浏览

c# - Redis Cache 同步请求超时,异步请求响应缓慢,仅在异步方法中

首先,我将 Azure Redis 缓存服务和 StackExchange.Redis(1.0.371) 客户端与我的 MVC 5 和 Web Api 2 应用程序一起使用。我得到了非常有趣的行为。当我使用异步转换同步调用时,同步请求超时,响应缓慢。让我给你举个例子。这是我的 RedisCacheService,

这是我调用缓存的方法。

上面的方法总是给我,

或者

让我们将其更改为异步,

上述方法有效,但至少需要 5-10 秒。我的意思是如果没有可用的缓存则为 10 秒,如果缓存可用则为 5 秒。

现在让我的方法完全同步,

请注意调用存储库方法的注释。上述方法立即生效,意味着我在不到 1 秒的时间内得到结果。Azure 或 StackExcahge.Redis 客户端显然有问题。

更新:我的最后一种方法(异步)也很有效(快速且没有错误),

请注意,我仍然评论了存储库代码。