繁体   English   中英

ServiceStack.Redis客户端-事务已在进行中

[英]ServiceStack.Redis client - A transaction is already in progress

我正在使用servicestack.redis客户端进行连接。 Redis基本上被用作SignalR背板(使用bookleeve客户端)。 我还使用ServiceStack.Redis客户端维护连接列表

我在RedisConnectionManager.cs有这样的代码(以及类似的AddConnectionGetConnections方法AddConnectionRemoveConnection由SignalR集线器上的方法调用。

现在让我们开始讨论这个问题...偶尔,我收到一个InvalidOperationException消息, CreateTransaction调用中A transaction is already in progress中。 这通常是Redis在if语句if (connections == null || connections.Count == 0)引发异常之后。

无论如何,发生的事情是在那之后,直到我重新启动该过程,事情才起作用-因为每次我都收到InvalidOperationException 我插入了ServiceStack.Redis客户端代码,根据文档,它应该提交或放弃事务。 好像没有发生,然后客户端处于RedisClient.Transaction状态,因为RedisClient.Transaction对象永远不会为null

我找不到ServiceStack.Redis的错误跟踪器,因此希望SO上的人们能更好地了解。

    public void RemoveConnection(string clientId, string connectionId)
    {

        try
        {
            var key = "CONNECTION_" + clientId;
            redis.Watch(key);

            var connections = redisTypedClient.Lists[key];


            if (connections == null || connections.Count == 0)
            {
                return;
            }


            using (var t = redisTypedClient.CreateTransaction())
            {
                t.QueueCommand(c => c.RemoveItemFromList(connections, connectionId));
                t.Commit();
            }

        }
        finally
        {
            redis.UnWatch();
        }
    }

因此,在这种情况下,问题在于我正在重用redis连接,但这不是一个好主意。 每次我转到创建和使用新的Redis连接时,这个问题就消失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM