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

redis - ServiceStack.Redis 无法读取传输 - BasicRedisClientManager

尝试通过 ServiceStack.Redis 读取 redis 列表时,我间歇性地收到以下错误:“无法从传输连接读取数据:已建立的连接被主机中的软件中止”。我想知道我关于如何使用 ServiceStack 可靠地连接和池连接到 Redis 的整个概念是否错误。这是我使用密封类和单例模式进行连接的代码:

然后我实例化另一个使用单例的类:

这又被实例化并从“服务”DTO 回调中调用:

然后我使用“邮递员”发布到这条路线。大多数点击“发送”都会返回数据。有些以例外结束。例外情况是尝试从 redis 中读取,如代码中带有注释“<-- exception here”的代码中所示。现在还有一点是我最近通过设置配置文件将我的redis配置为使用密码。我提到这一点是因为我不记得以前有过这个问题,但这也可能无关,不知道。

在释放 redis 连接方面,我的想法是当 RedisBarSetData() 超出范围时,我的析构函数调用 Redis.Dispose 。这是处理它的可靠方法还是有更好的方法。我看到人们在获取池客户端时使用“使用”语句,但是我有很多“使用”语句,而不是在课堂上的一个地方调用:“Redis = (RedisClient)RedisClientBase.Instance.Redis .GetClient();" 如果我有一堆类的方法,那么我必须在每个方法中重复代码吗?

  • 当我说“我不记得以前有过这个问题”时,我将这种模式用于数十个工作 DTO。不知道为什么它现在失败了?
0 投票
0 回答
90 浏览

multithreading - Designing ServiceStack and ServiceStack.Redis with a message exchange

I have reviewed and implemented / tested all the messaging options with ServiceStack that I know of (and I've searched on and off for a long time). The two are Pub/Sub and RedisMQ. Both of these have limitations that I needed to go beyond. I have already done this and have a solution that works perfectly for my system. The purpose of this posting / question is to see if I missed a better way, and a check on if my solution is really thread-safe. So far it is working well and I think it is good.

What I did was create an "exchange" class, and then a "pub" class and a "sub" class. My need was to have an arbitrary number of publishers, in any number of threads, publish to an arbitrary number of subscribers, in any number of threads. The only restriction is that my publisher and my subscriber can not be in the same thread, as this causes deadlock. This is by design, so for me not a limitation, as I want blocking subscribers (this could actually be changed with one line of code, but is not my application need and would actually be a negative). Also note that the subscribers can be to unique publishers or any number of subscribers to the same publisher (fan-out). This was the MQ limitation I needed to resolve. The Pub/Sub limitations were even greater, but let's not digress into why they did not solve my needs.

The usage construct for what I call RedisMEnQ (En = Enqueue because it uses Redis.EnqueueItemOnList) is to instantiate the pub class for each publisher, and a sub class for each subscriber. The pub and sub classes both own an instance of the exchange class, thus sharing the same exchange code. There is no direct interaction between pub and sub classes except through Redis. The exchange code implements locks so that the various threads are thread safe during exchange transactions, and of course the redis connections are unique for each thread and thus thread safe.

The Exchange code is the most interesting, and quite short, so I thought I'd post it:

#xA;

There are lots of ways to approach the problem, but to understand the code one thing should be clarified. I am reusing subscriber ids. That makes it slightly more complex than it would be otherwise. I didn't want to have unnecessary gaps in subscriber ids, so if a subscriber unsubscribes, the next subscriber will pick up the unused id. I put the locks in so that a subscriber does not partly subscribe while a publisher is publishing. Either the subscriber is fully subscribed or not at all.

0 投票
0 回答
217 浏览

servicestack - 调用 RedisTypedClient.As 时出现 nullreferenceexception方法

这个问题说明了一切..

当我们突然碰到这个时,我们已经运行了 10 个小时。我不得不回收 IIS 才能从中恢复..

这是堆栈跟踪.. System.NullReferenceException:对象引用未设置为对象的实例。在 ServiceStack.Redis.RedisClient.AsT 在 XXX.Cache.Providers.Redis.RedisCachedCollection 2.GetCollection(IRedisClient redis) at XXX.Cache.Providers.Redis.RedisCachedCollection2.GetEnumerator() 在 System.Linq.Enumerable.WhereEnumerableIterator 1.MoveNext() at System.Linq.Buffer1..ctor(IEnumerable 1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable1 源)

这是 GetCollection 方法..

0 投票
1 回答
830 浏览

c# - 同时读取请求的 ServiceStack Redis 问题

我正在使用 ServiceStack.Redis 实现来缓存通过 Web API 接口传递的事件。这些事件应该被插入缓存并在一段时间后自动删除(例如 3 天):

StructureMap 3 注册表如下所示:

第一个场景是检索所有缓存的事件(数百个)并通过 ODataV3 和 ODataV4 将其传递到 Excel PowerTools 以进行可视化。这按预期工作:

但我正在努力解决的是 Excel PowerQuery 所做的 OData 过滤。我知道我还没有进行任何服务器端过滤,但这并不重要。当我过滤任何属性并单击刷新时,PowerQuery 会同时发送多个请求(我看到最多三个)。我相信它首先获取整个数据集,然后使用过滤器执行以下请求。这会导致 ServiceStack.Redis 出现各种异常:

附加信息,如:

或者

或者

或者

所有这些异常都发生在_eventsCache.GetAll().

一定有什么我错过了。我确信 Redis 能够在同一个集合上“同时”处理大量请求,但显然我做错了。:)

顺便说一句:Redis 2.8.12 正在 Windows Server 2008 机器上运行(很快 2012 年)。

感谢您的任何建议!

0 投票
1 回答
7407 浏览

c# - StackExchange.Redis 可以用来存储 POCO 吗?

我正在尝试使用两个著名的 C# 驱动程序ServiceStackStackExchange来评估 Redis 。不幸的是,我不能使用 ServiceStack,因为它不是免费的。现在我正在尝试 StackExchange。

有人知道我是否可以使用 StackExchange.Redis 坚持 POCO?

0 投票
1 回答
2378 浏览

servicestack - 在大容量场景中使用 servicestack.redis 时出现协议错误、“没有更多数据”错误、“零长度响应”错误

如果有人告诉我 PooledRedisClientManager 在大容量场景下是否存在问题,真的会有所帮助吗?

我正在使用一个单例客户端管理器,它在几分钟内被多个 WCF 线程调用 GetClient() 1000 次,并且每个线程都可以读取/更新/插入 Redis 集合(我正在使用 redis 哈希集合)。

我会间歇性地看到这些错误,并且通常会在重试时消失。

所有 GetClient() 调用都在 Using 语句中。

谢谢Rb

以下是我从日志中看到的错误:错误 1

错误 3

代码:

基本上,我围绕 RedisHash 创建了一个包装器 RedisCacheCollection ...这是为了支持使用 .net 列表和字典的现有代码。

}

0 投票
1 回答
1774 浏览

unit-testing - 如何使用 Moq 对 Service Stacks Redis 客户端进行单元测试

我试图了解如何模拟 IRedisClientsManager 以便我可以使用 Moq 对下面的 Handle 方法进行单元测试。

干杯

我像这样从服务中调用

到目前为止,这是一种方法 - 不确定是否在正确的轨道上

0 投票
1 回答
130 浏览

redis - 根据属性值检索 servicestack redis 会话对象的选择

我想更新存储在 redis 中的多个 servicestack 用户会话。我想返回所有将自定义属性设置为某个值的会话,然后我可以处理它们。目前,我拥有的最佳解决方案是这样返回所有键:

我认为这不会很好地扩展。我想做一些类似于:

redis 是否可以做到这一点,如果可以,最好使用带有 ServiceStack 的标准库。

0 投票
1 回答
176 浏览

servicestack - 带有 azure RedisServerEvents 的 servicestack 服务器事件不起作用,而默认选项 MemoryServerEvents 起作用

关于使用 Azure Redis 缓存的 Servicestack ServerEvents 的问题。

服务器代码:我在 Global.asax 文件的配置方法下有这些行

以下是我在 web.config 中用于 redis 连接的值格式

客户代码:

当我在 Global.asax (即默认选项 MemoryServerEvents)中删除上面标记的Redis 注册时,效果很好。任何建议,想法都会非常有帮助。谢谢

0 投票
2 回答
12684 浏览

redis - 如何使用 Redis 防止竞争条件?

我只使用 Redis 作为我的数据库,我的客户是 ServiceStack.Redis。问题是,如果两个并发请求需要更新一个键,那么它可能是一个竞争条件。例如

A:

  1. int a = 获取密钥

  2. a = a - 100
  3. 设置密钥 a
  4. 执行

乙:

  1. int a = 获取密钥

  2. a = a - 100
  3. 设置密钥 a
  4. 执行

如果origin“key”是1000。如果speration A和B被序列化,那么“key”这两个操作的正确结果是800。但是如果A和B同时发生。在 A 可以提交之前,操作 B 从“key”中获取值 1000,并将 900 设置为“key”。那不是我想要的。如何防止这种竞争条件,使用“WATCH”?