zoukankan      html  css  js  c++  java
  • Redis客户端多线程跟多个连接不是一回事

    先抱怨一波,大国庆节的放假前一天的下班前15分钟,通知让我加班,因为一个Redis的bug,而这个bug我在1个半小时之前刚听说了个大概,心里很不情愿;

    好了,说正事;

    问题现象:

    bug是这样的,两个线程同时请求Redis服务器,但是只有一个线程收到了回复,另一个线程卡死;

    拿到这个问题,我先是想了想到底怎么查,于是想了可能出问题的位置,然后怎么通过日志和数据对比的方式确定问题出在哪个部分;

    下班了,赶紧去赶班车;

    坐在班车上就一直在想到底是哪里的问题,想了一会儿突然反应过来,总结了一下;

    问题分析:

    redis是客户端-服务器模型,我们现在虽然在客户端开启了两个线程,但是这两个线程共用了同一个socket;
    从服务器的角度来看,它看到的是客户端给我发来了数据,但是它根本不知道你客户端什么线程不线程的,它只知道收到了连续一串的命令,所以它处理完数据之后给客户端回复了一个reply,完事;
    这样两个线程只有一个线程收到了回复,另外一个线程阻塞;

    解决办法:

    确保每个线程都拥有一个独立的socket与服务器进行通信;当然,加锁也可以,但我觉得没必要在客户端就给串行了;

    这个方案提给了同事,自己很有信心,弄好就不用过去加班了,全程一个小时,刚好下班车回家,心情阴转晴;

  • 相关阅读:
    分割回文串(力扣第131题)
    子集 II(力扣第91题)
    子集(力扣第78题)
    组合总和 III(力扣第216题)
    JavaWeb部分 (前序)
    JavaSE部分 (IO流下)
    JavaSE部分 (IO流上)
    JavaSE部分 (File类)
    Leetcode 08.04 幂集 回溯与位图
    Leetcode 1405 最长快乐字符串 穷举与贪心
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/11766594.html
Copyright © 2011-2022 走看看