ServiceStack.Redis连接池不起作用的问题处理

本文介绍了一个使用Redis作为二级缓存的应用场景中遇到的问题:尽管使用了连接池管理客户端连接,但连接数仍然无法得到有效控制。经过排查,发现原因是由于应用配置了不支持INFO命令的Twemproxy,导致连接状态异常并不断新建连接。通过简单的代码修改避免了INFO命令的调用,最终解决了连接池失效的问题。

在新的项目中用到了Redis做ORM的二级缓存,一开始是每次New一个新的Client去连接服务器,发现没过多久,服务器的连接池就爆掉了,于是用PooledRedisClientManager来做客户端连接池的管理,但是发现,无论怎么设置链接池的数量,客户端发起的连接数根本不受控制,还是一次一个新连接,很是郁闷,上Stackoverflow上搜了很久,没有一个办法能解决问题的,无奈之下只能连ServiceStack.Redis的源码进行调试,百般努力下终于发现端倪,罪魁祸首是下面这段代码:


由于这个项目中用到了Twemproxy,下面写着Twemproxy not support INFO command,这导致了每次连接Client都会去试图获取INFO信息,获取不到,就把连接的状态标志为HadExceptions = true,等到新的连接请求过来时,就会因为HadExceptions = true,而去关闭老的连接,再启一个新连接,这时连接池就一点用都没了,知道这个原因后,接下来怎么改就按大家自己的想法了,我的做法是简单粗暴的在获取版本号的地方给一个版本号,不再去发起INFO 请求,解决了这个问题。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值