csredis icon indicating copy to clipboard operation
csredis copied to clipboard

按文档报错:Connection was not opened 腾讯云redis数据库

Open xj728 opened this issue 5 years ago • 19 comments
trafficstars

腾讯云redis的链接字符串是这种格式的,请问支持吗? "fb92bf2e0abf11e5:[email protected]:6379" /实例ID:密码@访问地址:端口/

xj728 avatar Feb 09 '20 17:02 xj728

var csredis = new CSRedis.CSRedisClient("10.0.0.1:6379,password= 1234561178a1A,idletimeout=15000,testcluster=false");

2881099 avatar Feb 09 '20 23:02 2881099

222 我仔细看了下issues,很多人提到这个问题,不是腾讯云redis得问题,是如果项目服务器和redis服务器不在一台服务器上,就会出现这个问题。 下面得图就可以说明问题。 在startup中实例化后,在每个页面如果不重新实列,RedisHelper.Instance就为空,链接失败,报错:Connection was not opened,从新实例一次代码就OK,但如果服务器得地址是127.0.0.1,那么页面中就不需要从新实例。 222

xj728 avatar Feb 11 '20 06:02 xj728

你可以加我微信,我把服务器得密码和redis得密码都给,方便你测试 微信:18007232345

xj728 avatar Feb 11 '20 06:02 xj728

图片是不是传错了,两张是一样的。

如果是 .net core,在 Startup.cs 初始化一次:

var csredis = new CSRedis.CSRedisClient("10.0.0.1:6379,password= 1234561178a1A,idletimeout=15000,testcluster=false");
RedisHelper.Initialization(csredis);

如果是 .net framework 在程序启动的时候执行上述代码

2881099 avatar Feb 11 '20 06:02 2881099

如果项目服务器和redis服务器不在一台服务器上,就会出现这个问题。

不是这个原因,好几年的项目了,并且我也经常用 docker redis 作测试

2881099 avatar Feb 11 '20 06:02 2881099

第一张就是下面得代码。跟你写得一样。

444

xj728 avatar Feb 11 '20 06:02 xj728

你的腾讯云rds 是集群吗?请加上这个参数:testcluster=false

2881099 avatar Feb 11 '20 06:02 2881099

不是集群,加了这个参数, 就是准备用腾讯云redis,测试一下,就发现了问题。

在startup里的代码: redisConString = "122.17.0.13:6379,password=bswwe23sd_,idletimeout=15000,testcluster=false"; var csredis = new CSRedis.CSRedisClient(redisConString);

        RedisHelper.Initialization(csredis);

你可以http://www.hellowapp.com.cn/

错误详情: Connection was not opened {"StackTrace":" at CSRedis.CSRedisClient.GetAndExecute[T](RedisClientPool pool, Func2 handler, Int32 jump, Int32 errtimes)\r\n at CSRedis.CSRedisClient.ExecuteScalar[T](String key, Func3 hander)\r\n at CSRedis.CSRedisClient.Set(String key, Object value, Int32 expireSeconds, Nullable1 exists)\r\n at RedisHelper1.Set(String key, Object value, Int32 expireSeconds, Nullable`1 exists)\r\n at DM.Web.Pages.IndexModel.OnGet() in D:\MyDocument\DreamPlus\web\DM.Web\Pages\Index.cshtml.cs:line 44","Message":"Connection was not opened","Data":{},"InnerException":null,"HelpLink":null,"Source":"CSRedisCore","HResult":-2146233088}

**再次访问错误就变成: 【127.0.0.1:6379/0】状态不可用,等待后台检查程序恢复方可使用。Connection was not opened

如果把地址改成本地:127.0.0.1,就没问题。**

xj728 avatar Feb 11 '20 06:02 xj728

我下载了csredis,源码里也没与“状态不可用,等待后台检查程序恢复方可使用”这句话啊

xj728 avatar Feb 11 '20 06:02 xj728

反不方便加个QQ或微信聊,很多人问道这个问题呢。

xj728 avatar Feb 11 '20 06:02 xj728

www.hellowapp.com.cn 这台机器能访问 122.17.0.13:6379 吗?网络是通的?

2881099 avatar Feb 11 '20 06:02 2881099

确定可以访问,不能访问得话,重新实列化肯定也不能访问了。 这个人问题跟我得一样 https://github.com/2881099/csredis/issues/245

xj728 avatar Feb 11 '20 06:02 xj728

我的qq 2881099

2881099 avatar Feb 11 '20 06:02 2881099

确定可以访问,不能访问得话,重新实列化肯定也不能访问了。 这个人问题跟我得一样 #245

问题不一样,他的是协议解析问题,你的是 Connection was not opened

2881099 avatar Feb 11 '20 06:02 2881099

请问最终这个问题解决了吗?是怎么解决的

hours10000 avatar Feb 28 '20 07:02 hours10000

请问最终这个问题解决了吗?是怎么解决的

好的,谢谢,知道问题了。被别的层里从新实列了一个。谢谢。

这是楼主在 qq 回复我的。

  1. 加上这个配置

testcluster=false,idleTimeout=15000

  1. 检查网络是否连通

telnet rds 6379

2881099 avatar Feb 28 '20 07:02 2881099

谢谢 吓我一跳,担心我们以后也会出问题 😄

hours10000 avatar Feb 28 '20 09:02 hours10000

我们做的哨兵的集群,但是直接用的单例的client,没有用 RedisHelper.Initialization(csredis);进行初始化。报了同样的错误。并且发现该问题现在经常出现。貌似是近两个版本更新后的问题。之前我们是没有出现这种情况的。 加了 testcluster=false,idleTimeout=15000 貌似暂时好了,但是具体的是否还会出现要等后续的测试。

cocosip avatar Jun 19 '20 13:06 cocosip

把redis服务器的timeout设置为0试试

ligg avatar Sep 26 '20 06:09 ligg