【问题标题】:ServiceStack.Redis Unable to connect to Digitalocean managed redis instanceServiceStack.Redis 无法连接到 Digitalocean 托管的 redis 实例
【发布时间】:2020-05-18 01:56:39
【问题描述】:

最近我开始将作业处理器从 Node.js 转换为 .net core,并选择使用 ServiceStack.Redis 来管理与 Redis 的连接。

令人讨厌的是,如果它不抛出异常,我就无法让它连接到托管 Redis。关于这个错误甚至意味着什么的任何线索?

var redisManager = new BasicRedisClientManager(0,Environment.GetEnvironmentVariable("REDIS"));
var redis = redisManager.GetClient();
Unhandled exception. ServiceStack.Redis.RedisResponseException: unknown command `ROLE`, with args beginning with: 
   at ServiceStack.Redis.RedisNativeClient.ReadComplexResponse() in C:\BuildAgent\work\b2a0bfe2b1c9a118\src\ServiceStack.Redis\RedisNativeClient_Utils.cs:line 1075
   at ServiceStack.Redis.RedisNativeClient.SendReceive[T](Byte[][] cmdWithBinaryArgs, Func`1 fn, Action`1 completePipelineFn, Boolean sendWithoutRead) in C:\BuildAgent\work\b2a0bfe2b1c9a1
18\src\ServiceStack.Redis\RedisNativeClient_Utils.cs:line 616
   at ServiceStack.Redis.RedisNativeClient.SendExpectComplexResponse(Byte[][] cmdWithBinaryArgs) in C:\BuildAgent\work\b2a0bfe2b1c9a118\src\ServiceStack.Redis\RedisNativeClient_Utils.cs:l
ine 744
   at ServiceStack.Redis.RedisNativeClient.Role() in C:\BuildAgent\work\b2a0bfe2b1c9a118\src\ServiceStack.Redis\RedisNativeClient.cs:line 846
   at ServiceStack.Redis.RedisClient.GetServerRole() in C:\BuildAgent\work\b2a0bfe2b1c9a118\src\ServiceStack.Redis\RedisClient.cs:line 1065
   at ServiceStack.Redis.RedisResolver.CreateRedisClient(RedisEndpoint config, Boolean master) in C:\BuildAgent\work\b2a0bfe2b1c9a118\src\ServiceStack.Redis\RedisResolver.cs:line 84
   at ServiceStack.Redis.RedisResolver.CreateMasterClient(Int32 desiredIndex) in C:\BuildAgent\work\b2a0bfe2b1c9a118\src\ServiceStack.Redis\RedisResolver.cs:line 148
   at ServiceStack.Redis.BasicRedisClientManager.GetClient() in C:\BuildAgent\work\b2a0bfe2b1c9a118\src\ServiceStack.Redis\BasicRedisClientManager.cs:line 104

【问题讨论】:

  • 我认为您可以检查以下任一情况: 1. 通过redis-cli 检查您是否可以在您的Redis 节点上执行ROLE。 ROLE 可能在您的 Redis 服务器上被禁用或不可用。 2.由于您使用托管Redis服务,您可能想使用PooledRedisClientManager?
  • @Sharif 你是对的,ROLE 在托管实例上不可用。我设法通过设置 RedisConfig.VerifyMasterConnections = false; 来禁用它
  • 很高兴我的评论有帮助

标签: c# .net-core redis digital-ocean servicestack.redis


【解决方案1】:

其他任何人都会对此感到困惑,特别是如果您使用的是 DigitalOcean 的托管 REDIS。

基本上 ROLE 命令(可能还有其他命令)不可用,因此在此库中您必须设置以下标志。

RedisConfig.VerifyMasterConnections = false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 2020-04-02
    • 2013-10-20
    • 2014-07-04
    • 1970-01-01
    • 2021-04-30
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多