问题标签 [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 memory leak when cluster becomes unreachable
I am trying to integrate StackExchange.Redis client into my solution to do request logging.
High availability is essential, so the logging component must survive network failures and potential redis cluster outages. Precision is not essential, so I am using "Fire & Forget" mode.
To test network outage scenario I have created a test web application with the following code:
...and hit it with 50k requests using Apache Bench. After reaching 1.1GB working set, local IIS crashed.
This is not at all what I expect, given it is configured it to only retry once and timeout after 100ms.
Have I misconfigured it?
azure - Azure 中 Redis 缓存中的一致超时
我在一个 azure 网站中使用 Redis Cache。缓存托管在 Azure 中。在通过我们的监控为缓存设置值时,我注意到一些超时。因此,我运行了一些负载测试,这些测试是在我从本地服务器缓存转移到使用 redis 之前运行的,与以前的测试运行相比,结果非常糟糕,主要是由于 redis 缓存超时引起的。
我正在使用 StackExchange.Redis 库版本 1.0.333 强名称版本。
每次访问缓存时,我都小心不要创建新连接。
负载测试实际上并没有给服务器加载那么多,结果以前是 100% 成功的,现在由于超时导致大约 50% 的错误率。
用于访问缓存的代码。
c# - StackExchange.Redis:获取频道订阅数(即PUBSUB NUMSUB)
有没有办法通过 StackExchange.Redis 库获取特定 Redis 频道的频道订阅数?当直接与 Redis 交互时,它可以使用 PUBSUB NUMSUB 命令 ( http://redis.io/commands/pubsub ) 但我在 C# 客户端库中看不到等效调用。
stackexchange.redis - StackExchange.Redis server.Keys(模式:“IsVerySlow*”)
我是redis的新手,所以我做错了,我敢肯定:
我在 Azure Redis 中存储了大约 16,000 个键/值。
我使用以下内容编写键/值
所以我的钥匙看起来像这样:“AP:201401:AZ5798BK”
当我尝试查找时:
返回密钥需要 1 分 12 秒。一旦我有了密钥,就需要几毫秒来检索这些密钥的值。如果我遍历键的值并返回值,我会得到类似的结果。我做了一个 ToArray() 只是为了隔离问题。
如果我在 redis-cli.exe 中尝试相同的查询,它会在几毫秒内返回。
我是否错误地使用了这个命令?
c# - Redis Stack Exchange 如何按模式删除或获取密钥
我在 C# 中安装了 Stack Exchange redis 客户端。我只能删除一个键或键数组,但我不知道如何删除带前缀的键。或者另一种解决方案可以首先按模式获取所有键,然后删除它们。但我也不知道如何通过模式获取密钥。
caching - Azure Redis 缓存 - GET 调用超时
我们在 Azure 中有多个 Web 和辅助角色通过 StackExchange.Redis 库连接到我们的 Azure Redis 缓存,并且我们定期收到超时,这使我们的端到端解决方案陷入停顿。其中之一的示例如下:
System.TimeoutException:执行 GET 流超时:459,inst:4,mgr:不活动,队列:12,qu=0,qs=12,qc=0,wr=0/0,in=65536/0 在 StackExchange.Redis .ConnectionMultiplexer.ExecuteSyncImpl[T](消息消息,ResultProcessor
1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\58bc9a6df18a3782\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 1785 at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor
1 处理器,ServerEndPoint 服务器)在 c:\TeamCity\buildAgent\work\58bc9a6df18a3782\StackExchange.Redis\StackExchange\Redis\RedisBase.cs:StackExchange.Redis.RedisDatabase 的第 79 行.StringGet(RedisKey key, CommandFlags flags) in c:\TeamCity\buildAgent\work\58bc9a6df18a3782\StackExchange.Redis\StackExchange\Redis\RedisDatabase.cs:OptiRTC.Cache.RedisCacheActions 的第 1346 行。<>c__DisplayClass41.<Get>b__3() in c:\dev\OptiRTCAzure\OptiRTC.Cache\RedisCacheActions.cs:line 104 at Polly.Retry.RetryPolicy.Implementation(Action action, IEnumerable
1 shouldRetryPredicates, Func`1 policyStateFactory) at OptiRTC.Cache.RedisCacheActions.Get[T](String key, Boolean allowDirtyRead) in c:\dev\OptiRTCAzure\OptiRTC.Cache\RedisCacheActions.cs: 第 107 行 OptiRTC.Cache.RedisCacheAccess .d__e4.MoveNext() 在 c:\dev\OptiRTCAzure\OptiRTC.Cache\RedisCacheAccess.cs:1196 行;TraceSource 'WaWorkerHost.exe' 事件
所有超时都有不同的队列和 qs 编号,但其余消息是一致的。这些 StringGet 调用跨越缓存中的不同键。在我们的每个服务中,我们使用一个带有单个 ConnectionMultiplexer 的单例缓存访问类,该类在 web 或 worker 角色启动中注册到我们的 IoC 容器:
在我们的 ICacheAccess 实现中,我们正在创建多路复用器,如下所示:
在整个实例中使用 redis 对象。我们有大约 20 个 Web 和辅助角色实例通过这个 ICacheAccess 实现连接到缓存,但管理控制台显示平均有 200 个并发连接到缓存。
我已经看到其他使用 StackExchange.Redis 版本 1.0.333 引用的帖子,我们正在通过 NuGet 执行此操作,但是当我查看添加的 StackExchange.Redis.dll 参考的实际版本时,它显示为 1.0.316.0。我们已经尝试添加和删除 NuGet 引用以及将其添加到新项目中,但我们总是得到版本差异。
任何见解将不胜感激。谢谢。
附加信息:
我们已经升级到 1.0.371。我们有两个服务,每个服务以不同的时间间隔访问同一个缓存对象,一个用于编辑和偶尔读取,另一个每秒读取该对象多次。两种服务都使用相同的缓存代码和 StackExchange.Redis 库版本进行部署。我几乎从未在编辑对象的服务中看到超时,但我在读取它的服务上的超时时间在 50% 到 75% 之间。超时具有与上述相同的格式,并且在将 db.StringGet 调用包装在处理 RedisException 和 System.TimeoutException 并在 500 毫秒后重试一次的 Polly 重试块中后继续发生。
我们就这个问题联系了 Microsoft,他们确认他们在 Redis 日志中没有看到任何表明 Redis 服务端存在问题的内容。我们的缓存未命中率在 Redis 服务器上非常低,但我们继续收到这些超时,这严重阻碍了我们应用程序的功能。
回应评论,是的,我们在 qs 中总是有一个数字,而在 qc 中从来没有。我们总是在 in 的第一部分有一个数字,而在第二部分从来没有。
更多附加信息:
当我在较高 CPU 上运行具有较少实例的服务时,与在较低 CPU 上运行实例时相比,我得到的这些超时错误要多得多。更具体地说,我今天早上从我们的服务中提取了一些数字。当它们以大约 30% 的 CPU 运行时,我看到的超时问题很少——30 分钟内只有 42 个。当我删除了一半的实例并且它们开始以大约 60-65% 的 CPU 运行时,30 分钟内速度增加了 10 倍,达到 536。
c# - 使用 StackExchange.Redis 一段时间后出现连接问题
我遇到了 StackExchange.Redis 的问题:经过一段时间的空闲时间(几个小时)后,整个提供商无法再次连接到 Redis 并抛出所谓的异常It was not possible to connect to the redis server(s); to create a disconnected multiplexer [...]
。
如果我回收 IIS 应用程序池,一切都会再次正常,并且在另一个空闲时间之后,问题再次发生。这就是为什么我猜这不是 Redis 实例的问题,而是 StackExchange.Redis 的问题,因为我不是重新启动 Redis 服务,而是重新启动 IIS 应用程序池。
除了确保每个应用程序域有一个多路复用器实例之外,是否有关于如何管理 Redis 多路复用器的任何指导?
redis - 删除所有匹配的键
我想从我的 Redis 中删除所有匹配 SomePrefix* 的键。可能吗 ?我在库中只看到 m_connectionMultiplexer.GetDatabase().KeyDelete() 而不是 KeyMatch() 或 GetAllKeys()。
最好不要 Lua 脚本,例如Leonid Beschastny 的链接
我想在 Web 应用程序的初始化中使用它来获取应用程序的开发状态。
caching - CacheOutput 属性忽略 Azure 托管的 Redis 缓存
我刚刚使用StrathWeb 的库实现了我的 Asp.Net Web API 控制器的输出缓存,该库连接到StackExchange.Redis库,连接到 Azure 托管的 Redis 缓存。
我编写了一个自定义类,该类实现 StrathWeb IApiOutputCache 接口并调用等效的 StackExchange 方法。这在 Global.asax.cs 中注册为缓存输出提供者。
这是一个使用示例:
当调用 api 端点时,我可以看到框架正确调用了我的 IApiOutputCache 类上的所有必需方法:包含、设置和获取。但是,即使找到并返回缓存副本,GetExpensiveData() 方法也会始终运行并返回“新”数据。
没有错误被抛出。缓存似乎正在工作。然而,我的昂贵代码总是被调用。
谢谢你的帮助 :)。
c# - 使用 StackExchange.Redis 在 Azure Redis 缓存中存储自定义 .Net 对象
我们正在实施StackExchange.Redis来存储有关三个电子商务网站(大约 18,500 种产品)的所有信息。信息存储在 SQL Server 数据库中,映射到自定义对象,然后使用以下键命名约定添加到 Azure Redis 缓存中:
(其中 0 是商店标识符,1 是产品标识符)。我阅读了KEYS、SCAN、FLUSHDB 等在哪里?并且能够获得与urn:products:{0}
by 模式匹配的键。我们面临的问题是我们的项目涉及很多GetAllProducts List < Products >
,GetAllCategories List < Categories >
然后被 LINQ 函数使用。
基于此:
- 我尝试将所有产品(自定义对象列表)存储在一个键 (
urn:products:all
) 中,但这种方法会在 Azure Redis 缓存中产生超时。这种方法是建议的方法吗?还是最好将每个产品存储在单独的密钥中? - 我认为循环每个键以获取每个值是不正确的。是否可以按模式获取键/值的集合?
- 我也阅读了 HASHES,但我认为它们对我们的要求没有帮助。