首页 文章

ServiceStack RedisServerEvents创建了数千个密钥

提问于
浏览
2

我正在使用ServiceStack和RedisServerEvents插件来通知连接的客户端数据的变化 . 我有两个运行Apache / mod_mono / ServiceStack的Linux VM,一个Redis实例和一个HAProxy机器 .

我注意到的是,尽管目前每天只有6个活跃用户在测试软件(至少是使用SSE的部分),但我的Redis实例有数千个以“sse:id ...”开头的键 . . 所有这些都具有-1的TTL . 我可以清除Redis实例中的所有密钥,随着时间的推移,密钥的数量会慢慢回升 .

我想弄清楚的是:这是预期的行为吗?我需要在ServiceStack或我的客户端采取一些行动吗?

1 回答

  • 1

    删除订阅时应该是removing the users subscription info . 但是当AppDomain / Web应用程序关闭时,它赢了't have cleaned up the existing subscriptions. I'刚刚添加了一个commit,它将在AppDomain关闭时尝试清除所有剩余的活动订阅,但它干净地关闭将会有订阅剩余 .

    在这种情况下,您可以在Startup上调用 Reset() 以清除之前的所有订阅,例如

    container.Register<IServerEvents>(c => 
        new RedisServerEvents(c.Resolve<IRedisClientsManager>()));
    
    container.Resolve<IServerEvents>().Reset();
    

    注意:这将需要在任何服务器上有任何活动订阅之前运行,否则它也将删除它们 .

    此更改可从v4.5.7获得,现在为available on MyGet .

相关问题