设为首页 收藏本站
查看: 778|回复: 0

[经验分享] ServiceStack.Redis对多线程的支持

[复制链接]

尚未签到

发表于 2015-11-12 13:08:42 | 显示全部楼层 |阅读模式
  上周四上线了一个东西
  要在多线程的情况下访问Redis
  以前也用过ServiceStack.Redis去访问Redis
  加上这玩意在Redis官方网站推荐指数排第一
  果断就选择用它了
  


  考虑到我是在多线程的环境下使用的
  所以特意还去关注了它对多线程的支持
  看着他们api图上大大的一排鸟语:ThreadSafe Access
  我笑了
  


  结果今天早上一到公司
  一看数据
  所有的东西全挂
  回顾了一下上周上线的内容
  一下就确定是ServiceStack.Redis在作怪
  立马停掉
  然后拿下日志分析
  发现报了很多很诡异的异常...
  例如:
  System.Runtime.Serialization.SerializationException: Type definitions should start with a '{', expecting serialized type 'SubscriptionModel', got string starting with: 1

ServiceStack.Redis.RedisResponseException: Unknown reply on integer response: 43OK, sPort: 8223, LastCommand:

ServiceStack.Redis.RedisResponseException: Unexpected reply: +OK, sPort: 8223, LastCommand:

然后东西就不明不白的假死了
  看了下我的代码
  所有可能的异常都处理了啊
  这些小小的异常根本不可能搞死我的程序啊
  于是猜想难道是ServiceStack.Redis内部的机制导致内存溢出了?
  找运维查了下日志
  一切正常
  一点风吹草动都没有
  于是拿着代码在本地各种疯跑各种乱七八糟调试
  基本上出现的异常都被还原了
  但是我的代码还是没死啊...
  心里面一万头草泥马在奔腾啊...
  然后再去运维那要了更详细的日志
  回过头来看测试环境的程序
  竟然完美的还原了线上的场景
  跟进去一看
  所有的线程都卡在Redis的Get方法里
  这是什么情况?!
  确定了下Redis没有挂
  那就只能把问题锁定在ServiceStack.Redis里咯
  不由怀疑
  这玩意到底支持多线程不哦...
  然后详细看了下ServiceStack.Redis的文档
  然后发现一个惊天的秘密:
  这坑爹的ServiceStack.Redis不支持我们传统认为的线程安全啊
  


  ServiceStack.Redis对多线程采用的是连接池


  也就是说:
  每一个线程可以从连接池里获取一个连接供本线程使用
  在使用完毕过后还回给连接池
  这样来保证每一个线程使用的Redis连接都是独立的而不会互相干扰
  这就是ServiceStack.Redis所谓的ThreadSafe Access
  ServiceStack.Redis就是这样来保证线程安全的...


  


  坑爹呢这是...
  我们传统意义的线程安全可是多个线程并发访问一个对象啊
  而不是多个线程访问不同的对象啊...
  都怪我学艺不精啊...
  竟然不知道还有这种ThreadSafe Access啊...

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138345-1-1.html 上篇帖子: Redis学习手册(主从复制) Master-Slave 下篇帖子: Redis 高可用方案Keepalived
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表