问题标签 [servicestack.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 回答
146 浏览

c# - 如何在长时间运行的订阅线程中处理异常并从异常中恢复

我在几个 ASP.NET MVC 应用程序中使用 ServiceStack.Redis,以促进这些应用程序之间的基本消息传递。在一个应用程序中,我有一个类来设置订阅并处理应用程序感兴趣的任何消息,例如:

由于“SubscribeToChannels”被阻塞,我让它在一个单独的线程中运行。我希望该线程在 MVC 应用程序运行的整个过程中保持活动状态,并且我担心如果发生任何类型的异常,该线程将会死掉,或者与 Redis 的连接将停止。

我的问题是:是否有任何示例说明如何从订阅打开时可能发生的异常(连接失败、超时等)中恢复?

0 投票
0 回答
92 浏览

azure - Azure 中的 ServiceStack RedisMqServer 失败

我们在我们的一个站点上托管了一个 RedisMqServer 实例来处理电子邮件。在本地测试时,队列表现完美。当部署到 Windows Azure 时,队列将在启动时处理队列中的任何消息,但几分钟后将无法处理新消息。设置如下:

发布到队列:

发布从来没有任何问题。消息成功进入 redis mq:EmailMessage.inq。

检查我们看到的工作线程状态:

这个设置有问题吗?可以在 IIS 中托管 RedisMqServer 吗?

0 投票
3 回答
920 浏览

logging - 如何查看ServiceStack.Redis中执行的redis命令?

我想更好地了解 ServiceStack.Redis 在幕后所做的事情。我希望我可以连接一个调试/控制台记录器,它只会将执行的命令输出到该记录器,但我无法找到合适的 API。我确实找到了几个使用的参考,LogManager.LogFactory = new DebugLogFactory但即使在这样做之后,ServiceStack 中的任何内容都不会出现在我的调试输出中。

我也尝试使用 redis-cli 中的 MONITOR 命令,但是在使用 redis 的 windows 端口时它似乎有一些问题,因为它给了我以下错误:(error) ERR unknown command 'monitor'.

0 投票
1 回答
1237 浏览

c# - redis servicestack 客户端 List.Remove(item) 不起作用

我正在开发一个“任务控制系统”,它允许用户输入任务描述信息,包括何时执行任务以及任务需要什么环境(操作系统、浏览器等)。

“控制器”保存描述信息并安排任务。当预定时间到达时,调度程序检索任务信息并将任务“排队”以匹配所需环境的远程机器。

我的第一个切入点是使用关系数据库来保存任务描述和足够的历史信息来跟踪问题(大约 2 周的时间)。但这不是“大数据”问题,关系很简单,我需要更好的性能。

所以我正在寻找能提供更多性能的东西。我正在尝试为此使用redis,但我遇到了一些问题。我正在为客户端使用 ServiceStack.Redis 版本 3.9.71.0,而 Redis 2.8.4 是服务器。

此示例代码取自 Dan Swain 的教程。它已更新为与 ServiceStack.Redis 客户端 v 3.9.71.0 一起使用。大部分都有效,但 'currentShippers.Remove(lameShipper);' 不工作。谁能明白为什么会这样?

谢谢

通过将这些覆盖添加到“Shipper”类来解决问题:

0 投票
2 回答
1225 浏览

redis - redis 在 serviceStack 中按值查找键

我使用 ServiceStack C# 在 Redis 中保存和检索数据。我想按值查找键。尝试使用 SearchKey(string Pattern) 进行此操作,但不成功!代码:

你怎么做到这一点?

0 投票
0 回答
331 浏览

c# - ServiceStack.Text 不序列化字典

我在使用 ServiceStack.Redis 存储包含字典的对象时遇到问题。我试图存储的对象定义如下:

尽管大多数对象都被正确序列化,但 Dictionary 属性 (ExtendedProperties) 没有被序列化。

我试过设置 JsConfig.IncludePublicFields = true 但它似乎没有任何区别。

最让我困惑的是,字典似乎在某些时候是序列化的(主要是当我在调试器中单步执行代码时),但不是可重复的。

有没有人对我如何使字典成功序列化有任何建议(除了使用 Newtonsoft.Json 将对象序列化为凝视,然后将该指示存储在 Redis 中)

非常感谢,

理查德。

0 投票
1 回答
1719 浏览

redis - Flushing portions of a Redis cache

I'm investigating the use of Redis in an asp.net mvc application using the ServiceStack.Redis client and a single Redis instance running on a remote machine.

Our cache is broken up into 3 major "areas" (Asp.net output cache, NHibernate second level cache, application cache) and I would like to have the ability able to "flush" all of the keys in these areas individually.

In Couchbase (which we currently utilize) this would be accomplished by using separate buckets with a client instance pointing to each one. We could then flush all values in these buckets using a single call from the appropriate client instance.

Is there a way to accomplish a setup like this using Redis? If so, how do I approach this from the client/server side?

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 回答
225 浏览

servicestack - ServiceStack - 来自缓存的 DateTime SerializeFn 与数据库不同

在我的 Servicestack 应用程序中,我试图将数据库中的 Datetime 序列化为 RFC3339 标准。存储在数据库中的日期时间是本地时间。对于我的应用程序,数据库位于 2 个不同的位置,一个是 +7 偏移量的印度尼西亚,另一个是 +8 偏移量的马来西亚。两个数据库分别以本地时间存储。

相同的应用程序用于从不同位置为两个数据库提供服务。该应用程序的当地时间是偏移量+8,位于马来西亚。

当日期时间来自印度尼西亚数据库时,例如“2014-09-19 14:07:27.387”(下午 2 点),我会将偏移量 +7 附加到“2014-09-19T14:07:27.3870000+07:00”(下午 2 点 + 7 点)。以下是 SerializeFn 的代码

GetDateTimeOffset 函数的代码:

然后 Redis 将该值缓存为“2014-09-19T14:07:27.3870000+07:00”(2pm+7)。后续请求将从 Redis 缓存值获取,.NET 应用程序将自动转换为应用程序本地时间,在 SerializeFn 之前变为“2014-09-19 15:07:27.387”(下午 3 点,应用程序本地时间偏移 +8) .

日期时间的小时数增加了 1 小时。经过相同 SerializeFn 的缓存输出值已变为“2014-09-19T15:07:27.3870000+07:00”(3pm+7)

由于 .NET 中的自动转换,印度尼西亚 +7 的缓存日期时间增加了数小时。

无论如何要确定 SerializeFn 中的来源在哪里?如果我以正确的方式做事,谁能指导我?提前致谢。

0 投票
3 回答
877 浏览

c# - 为什么使用 PUBSUB 订阅时无法 PING?

我在 Azure 上使用 PUBSUB 时遇到问题。

Azure 防火墙将关闭空闲时间不限的连接。时间长度有很多争论,但人们认为大约是 5 到 15 分钟。

我使用 Redis 作为消息队列。为此,ServiceStack.Redis 库提供了一个订阅以下频道的 RedisMqServer:

在后台线程上,它阻止从套接字接收数据,等待从 Redis 接收消息。问题是:

如果等待 Redis 消息的套接字在任意时间段内处于空闲状态,Azure 防火墙会静默关闭连接。我的应用程序不知道,因为它现在正在等待关闭的连接(就其而言,它是打开的)。后台线程有效地挂起。

我曾想过实现某种 Keep Alive,即等待消息一分钟,但如果没有收到消息,则 PING 服务器有两个目标:

  1. 通过告诉 Azure 此连接仍在使用中来保持连接打开。
  2. 检查连接是否已关闭,如果是,则重新开始并重新订阅。

但是,当我实现这一点时,我发现我在订阅时无法使用 PING 命令?不知道为什么会这样,但有人有替代解决方案吗?

我不想定期退订和重新订阅,因为我可能会错过消息。

我已阅读以下文章:http: //blogs.msdn.com/b/cie/archive/2014/02/14/connection-timeout-for-windows-azure-cloud-service-roles-web-worker.aspx其中谈到了 Azure 负载均衡器如何在 4 分钟后断开连接。但是,即使我可以保持连接处于活动状态,如果连接因其他原因(redis 节点关闭)而被终止,我仍然需要实现重新启动订阅的第二个目标。