问题标签 [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 投票
4 回答
9237 浏览

c# - 使用 C# 的 StackExchange / Sentinel 进行 Redis 故障转移

我们目前正在使用 Redis 2.8.4 和 StackExchange.Redis(并且喜欢它),但目前没有任何针对硬件故障等的保护措施。我试图让解决方案工作,我们有主/从和哨兵监控,但不能完全到达那里,我在搜索后无法找到任何真正的指针。

所以目前我们已经做到了这一点:

我们在每个节点上有 3 个 redis 服务器和哨兵(由 Linux 人员设置):devredis01:6383 (master) devredis02:6383 (slave) devredis03:6383 (slave) devredis01:26379 (sentinel) devredis02:26379 (sentinel) devredis03: 26379(哨兵)

我能够将 StackExchange 客户端连接到 redis 服务器并写入/读取并验证数据是否正在使用 Redis 桌面管理器跨所有 redis 实例复制。

我还可以使用不同的 ConnectionMultiplexer 连接到哨兵服务、查询配置、请求主 redis 节点、请求从属节点等。

我们还可以杀死主 redis 节点,并验证其中一个从属被提升为主,并且复制到另一个从属继续工作。我们可以观察到尝试重新连接到主服务器的 redis 连接,如果我重新创建 ConnectionMultiplexer,我可以再次向新提升的主服务器写入/读取并从从服务器读取。

到目前为止,一切都很好!

我缺少的一点是您如何将它们整合到生产系统中?

我应该从哨兵获取redis端点并使用2个ConnectionMultiplexers吗?我到底要做什么才能检测到节点已关闭?StackExchange 可以自动为我执行此操作,还是传递一个事件以便我可以重新连接我的 redis ConnectionMultiplexer?我是否应该处理 ConnectionFailed 事件然后重新连接,以便 ConnectionMuliplexer 找出新的主设备是什么?大概在我重新连接时,任何写入尝试都会丢失?

我希望我不会在这里遗漏一些非常明显的东西,我只是在努力将它们放在一起。

提前致谢!

0 投票
3 回答
24463 浏览

c# - 如何使用 StackExchange.Redis 存储用户定义的对象?

我能够通过使用在 ServiceStack.redis 中做到这一点,

但我在 StackExchange.Redis 中找不到任何示例。

我是否必须序列化为 JSON 然后存储它们?

提前谢谢。

0 投票
1 回答
5052 浏览

c# - 在 StackExchange.Redis 中等待异步命令和 Task.WhenAny 后的超时异常

我正在经历所谓的超时执行 HGET company:product:settings, inst: 1, queue: 8, qu=0, qs=8, qc=0, wr=0/0, in=79/1超时异常.

这很奇怪,因为同一台机器上的同一个 Redis 实例正在存储数据,但它是一个特定的应用程序引发了这个异常。更新:其实同一个应用,上面一行从 Redis 接收数据。问题在于HGET.

此外,我将多路复用器配置的超时时间增加到 6 秒,但没有运气。

此外,我检查了该IDatabase实例是否IsConnected具有true价值。

如何解释这些错误消息以及整个超时背后的问题是什么?

一些背景...

某些代码部分获取数据库(即multiplexer.GetDatabase())时,我已经成功解决了这个问题。

虽然多路复用器有一个实例,AppDomain如 StackExchange.Redis 文档中所述,但许多控制反转组件正在IDatabase它们自己的代码中创建许多实例。也就是说,IDatabase实例不共享。

实际代码正在执行 a ListRightPopLeftPush,然后,它正在实例化控制组件的反转,该组件在组件实例化期间读取哈希键。如果在做所谓的之前实例化整个组件ListRightPopLeftPush,那么整体HashGet不会抛出超时异常。

似乎即使ListRightPopLeftPush从其他实例执行,在执行读取操作时也会IDatabase在下一个实例中产生某种问题。IDatabase

无论如何,我的修复没有回答这个问题。我刚刚添加了更详细的信息,以便我们找到问题所在和自己的解决方案。

更新

Anyway, the above "fix" won't fix further read accesses to Redis. I'm getting the same timeout exception in further calls. And now in paramater found in exception's message says 60/1.

0 投票
1 回答
16606 浏览

c# - StackExchange.Redis 的正确使用方法

这个想法是使用更少的连接和更好的性能。连接是否随时到期?

对于另一个问题,是否_redis.GetDatabase()打开新连接?

0 投票
1 回答
2672 浏览

.net - Stackexchange.Redis 的“一劳永逸”能保证交付吗?

我了解这CommandFlags.FireAndForget适用于您不关心响应的情况。

即使响应对正在运行的应用程序并不重要,它是否也能保证交付?

0 投票
1 回答
2741 浏览

c# - 在 StackExchange.Redis 中维护 ConnectionMultiplexer 对象的正确方法是什么?

我正在将ConnectionMultiplexer静态对象存储在 ASP.NET MVC 网站中,获得 ~500req/sec,这些对象正在 RedisLabs 上命中 Redis 实例。SocketFailure on EVAL有时我会在 RedisLabs 仪表板上看到错误提示并增加连接数。我应该处理旧ConnectionMultiplexer实例并重新创建新实例还是在出现这些异常后尝试手动重新连接?

0 投票
1 回答
555 浏览

redis - Batch deletes using stackexchange.Redis?

Our application has to evict an array of keys (probably a few hundred) from Redis. Is there a way to batch delete in Stackexchange.Redis?

0 投票
2 回答
3204 浏览

c# - StackExchange.Redis ListRightPop 不等待结果

我正在尝试在 C# 中使用 Redis 编写生产者/消费者系统。产生的每条消息只能由一个消费者消费,我希望消费者等待消费者创建的元素。我的系统必须支持许多生产/消费者集。

StackExchange.Redis用来与 Redis 进行通信,并使用列表来添加ListLeftPush和删除元素ListRightPop。我遇到的是,虽然该ListRightPop方法应该阻塞直到列表中存在一个元素(或在定义的超时之后),但如果列表中没有元素,它总是自动返回。这是我为检查而编写的测试代码:

nil不到 1 秒我就得到了结果。

0 投票
0 回答
500 浏览

c# - 启用 Thrown CLR Exceptions 时 StackExchange.Redis 在 Connect 上引发异常

我正在使用StackExchange.Redis,效果很好。我们使用 Redis 作为备用缓存系统,因此应用程序实际上并不需要它来运行。当我们在本地处理我们的项目时,我们喜欢启用该Thrown Common Language Runtime Exceptions复选框,因为我们使用一些异步方法并且想要内部异常而不是AggregateExeptions,并捕获开发人员可能错误地吞下的错误。

当我们在 VS 中启动项目并选中该选项(而不是启动 redis 服务器实例)时,该ConnectionMultiplexer.Connect()方法会引发一些令人讨厌的错误,您必须单击它们等等才能继续前进。我们通常不会在其他第三方库中看到这种行为,并且由于库有一个ConnectionFailed事件,我希望看到它只是触发该方法。

关于如何防止这种情况发生的任何想法,或者这是一个错误,还是我只是错误地处理了这个问题?

更新

截屏

在此处输入图像描述

0 投票
1 回答
1388 浏览

asp.net - Web 场景下 StackExchange.Redis ConnectionMultiplexer 生命周期管理

什么是 Web 场景中 ConnectionMultiplexer 实例的正确生命周期管理。据我了解,它通过流水线管理单个请求,从而减少延迟造成的负面影响。这是否意味着在 Web 应用程序中 ConnectionMultiplexer 应该用作单例而不是更频繁使用的请求范围?