Jedis线上的一个小坑:Redis有并发访问的数据错乱的问题

问题现象:

业务数据有错乱,A的一些数据有好几个都是B的数据

这些业务数据在保存在Redis缓存中,怀疑是并发情况下Jedis错乱的问题

原因分析:

  1. JedisUtil里面在使用完Jedis 后释放资源的方式不安全,会在有异常情况下没有释放干净,导致会被别的线程使用,从而导致别的线程使用了里面的数据
  2. Jedis的异常是因为 AWS做了线上维护把Redis做了主从切换,换成了b区的实例(node节点大部分在a区),导致Redis连接异常,从而引发了原因1

解决方案:

  1. 把不安全的释放shardedJedisPool.returnResource(jedis); 改成 jedis.close()
  2. 把Redis实例中的a区做为主实例区

思考:

这个还是可以通过静态代码检查尽早发现的,要重视@deprecated的告警提示,小问题点会引起线上大业务问题。 现在想着还后怕类似的问题

猜你喜欢

转载自www.cnblogs.com/renshengjun/p/10982622.html