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

c# - StackExchange.Redis SetAdd(key, val) 因 key = GUID 而崩溃

非常烦人的崩溃StackExchange.Redis SetAdd(key, val)

我想设置一个以程序 GUID 作为键的集合。

我发现(经过 3 小时的调试)SetAdd(key, val)可以使用某些 GUID,但会与其他 GUID 一起崩溃:

区别在于最后一个字符“9”与“7”

不能SetAdd将本地 GUID 用作密钥?

环境:C# .NET 4 Win 8.1 VS2013

崩溃消息:

坠机点在StackExchange.Redis

在此处输入图像描述

...

我在 LINQPad 中测试了这段代码。它在同一个地方崩溃。第一个 GUID 有效,第二个无效。

似乎崩溃不是因为这是启动应用程序 GUID。

使用不同的 GUID 进行更多测试。只有以“7”结尾的崩溃。

...

KeyExists, StringIncrement,StringSet与 key = my GUID 配合使用效果很好。

0 投票
1 回答
2480 浏览

redis - StackExchange.Redis - 禁用 EVALSHA?

在停止和重新启动 Redis 服务器时,通过 Redis 发送内容会引发以下错误:“StackExchange.Redis.RedisServerException:NOSCRIPT 没有匹配的脚本。请使用 EVAL。”

我的理解是,当服务器不记得带有 SHA1 摘要的脚本时,就会发生此错误。我猜服务器会在重新启动时删除缓存的脚本 - 这应该如何处理?

0 投票
1 回答
10566 浏览

memory-leaks - 如何判断 Redis 内存泄漏?

从昨天开始,我们的 redis 服务器逐渐(200MB/小时)使用更多的内存,而键的数量(330K)和它们的数据(132MB redis-rdb-tools)保持不变。

redis-cli info 的输出显示 6.89G 已用内存?!

当我们将(.net)客户端代码从 BookSleeve 1.1.0.4 更新到 ServiceStack v3.9.71 以准备升级到 Redis 2.8 时,问题就开始了。但是很多其他的东西都更新到了而且我们的会话状态存储(也是redis,但使用harbor客户端)没有表现出相同的症状。

Redis 的所有内存都去哪儿了?如何解决它的使用问题?

编辑:我刚刚重新启动了这个实例,内存恢复到 350M,现在又开始爬升了。前 10 个最大对象的大小仍然相同,从 100K 到 nr 1 的 25M 不等。键的数量已下降到 270K(之前为 330K)。

0 投票
3 回答
18162 浏览

performance - 100% CPU 时如何提高 Redis 性能?分片?最快的 .Net 客户端?

由于我们网站上的大量负载增加,redis 现在正努力应对峰值负载,因为 redis 服务器实例达到 100% CPU(在八个内核之一上)导致超时。

我们已将客户端软件更新到 ServiceStack V3(来自 BookSleeve 1.1.0.4)并将 redis 服务器升级到 2.8.11(来自 2.4.x)。我之所以选择 ServiceStack,是因为存在使用 ServiceStack.Redis的Harbour.RedisSessionStateStore 。我们之前将 AngiesList.Redis 与 BookSleeve 一起使用,但我们也体验到了 100%。

我们有八个配置为主/从树的 redis 服务器。用于会话状态的单个服务器。其他用于数据缓存。一个主站有两个主站/从站,每个从站连接到两个从站。

当服务器以 100% 的 CPU 开始阻塞时,它们会在峰值时保持大约 600 个客户端连接。

我们可以做些什么来提高性能?

分片和/或 StackExchange Redis 客户端(据我所知,没有可用的会话状态客户端......)。

或者它可能是别的东西?会话服务器也达到 100%,并且没有连接到任何其他服务器(数据和网络吞吐量很低)。


更新一:redis-cli INFO分析

这是运行 Redis 2.8 一晚后 INFO 命令的输出。


更新 2:twemproxy(分片)

我发现了一个有趣的组件,叫做twemproxy。据我了解,这个组件可以跨多个 redis 实例进行分片。

这会有助于减轻 CPU 的负担吗?

它会为我们节省大量的编程时间,但在每台服务器上配置 3 个额外的实例仍然需要一些努力。所以我希望有人能在我们投入工作之前确认或揭穿这个解决方案。

0 投票
1 回答
2558 浏览

c# - Redis StackExchange 缓存性能

我正在尝试使用 Azure 的 Redis StackExchange 更改提供程序,只是想知道最佳设置。

考虑以下代码

每次调用缓存时,获取数据库都会对性能造成影响吗?

是否应该以其他方式进行管理?

它应该只在对象的生命周期内创建而不是静态的吗?

管理 IDatabase 的最佳实践是什么?

0 投票
4 回答
60570 浏览

azure - 从 StackExchange.Redis 缓存中删除/删除所有/一项

我正在使用带有 Azure Redis 缓存服务的 StackExchange.Redis 客户端。这是我的课,

更新:在 Marc 的帮助下,这是我的最后一堂课

现在我不知道如何从 redis 缓存中删除所有项目或单个项目。

0 投票
1 回答
739 浏览

redis - StackExchange.Redis 是否支持 MONITOR?

我最近从 Booksleeve 迁移到 StackExchange.Redis。

出于监控目的,我需要使用MONITOR命令。

在我阅读的wiki中

从 IServer 实例,服务器命令可用

但我在 ; 中找不到任何关于 MONITOR 的方法IServer。在存储库中快速搜索后,即使RedisCommand.MONITOR已定义,似乎此命令也未映射。

那么, StackExchange.Redis 是否支持 MONITOR 命令?

0 投票
0 回答
1336 浏览

c# - Redis 的随机 NullReferenceException

我的代码中出现了间歇性错误。当我使用 Visual Studio 调试它时,所有异常(捕获和未捕获)都会中断,所以我不知道该怎么做。

看起来它是堆栈跟踪中的会话状态提供程序,这是配置:

我从 NuGet 安装了 StackExchange.Redis,我正在运行 1.0.297。我无法定期重现这种情况,我尝试了各种浏览器和操作系统,但它只是“有时”发生。

这是堆栈跟踪:

0 投票
1 回答
947 浏览

asp.net-mvc - OAuth 2 Owin 不工作 StackExchange.Redis SessionState

从一个全新的 MVC5 项目开始,我将 External OAuth Login 与 Google、Facebook Twitter、Microsoft 等连接起来。一切都按预期工作。

然后,我为 Redis 预览版添加了新的ASP.NET 会话状态提供程序并让它工作。是的!

我很快注意到尝试使用任何 OAuth 提供程序登录不再正常工作。Google 和 Facebook 登录按钮调用 Accont 控制器上的 ExternalLoginCallback(string returnUrl) 但无处可去。登录页面只是刷新。

LinkedIn、Twitter 和 Microsoft 按钮都将用户引导到这些登录页面,但是当返回到我的应用程序时,它们返回到登录页面并且没有用户添加到系统中。

在我的 web.config 中注释掉自定义 sessionState 条目会使外部登录恢复正常。

考虑到这两个框架对我来说都是黑匣子,我不确定如何让这两个框架一起发挥作用。

0 投票
1 回答
6659 浏览

redis - key.Exists 为过期密钥返回 true

可能是我错过了一些一般性的东西,对此我感到抱歉。但在我的测试中,当我检查过期密钥(哈希)是否存在时,它返回 true:

这里的“缓存”是 IDatabase 实例

此外,使用 When.NotExists 设置将起作用:

更新:

@Marc_Gravell 的回答帮助我在测试中找到了问题:当我将到期时间设置得太短(约 500 毫秒)时,我收到了这种奇怪的行为。当我确实将其更改为 1 或 2 秒时 - 我的测试现在通过了。

更改Marc 的示例中,也会发生这种情况(我将过期时间更改为 400 毫秒):

// cache.HashSet(key, "full", "some value"); // cache.KeyExpire(key, TimeSpan.FromSeconds(3));

带来

更新 2:

这段代码昨天对我来说很好,但现在不起作用。

线

返回

更改为使用秒数没有帮助:

返回相同的结果( Assert.IsFalse(exists, "expired key exists"))