Redis实现乐观锁+分布式事务

Posted on 2020-10-10 15:47  嘿!!!!  阅读(2465)  评论(0编辑  收藏  举报

Redis实现乐观锁+分布式事务

项目做了负载后出现的问题优化

原始代码:

 

问题做了负载后,不同的服务持有不同的lockNumQueue并发量高的时候出现多个线程抢同一个号源,生成大量的失败订单。

优化后的代码:

 

通过spring data redis操作redis,将源代码中的lockNumQueue 放入redis,对列表的主键加锁,并对连接标记事务。事务提交后list不为空则成功,否则失败。

注意:连接使用完成后,调用RedisConnectionUtils.unbindConnection(redisTemplate.getConnectionFactory());释放连接,不释放连接可能过段时间会报错。

复现方式:使用线程池访问方法,如果访问的次数达到redis的最大连接数就会出现异常,JedisException: Could notget a resource from the pool