Redis實現樂觀鎖+分布式事務
項目做了負載后出現的問題優化
原始代碼:
問題做了負載后,不同的服務持有不同的lockNumQueue,並發量高的時候出現多個線程搶同一個號源,生成大量的失敗訂單。
優化后的代碼:
通過spring data redis操作redis,將源代碼中的lockNumQueue 放入redis,對列表的主鍵加鎖,並對連接標記事務。事務提交后list不為空則成功,否則失敗。
注意:連接使用完成后,調用RedisConnectionUtils.unbindConnection(redisTemplate.getConnectionFactory());釋放連接,不釋放連接可能過段時間會報錯。
復現方式:使用線程池訪問方法,如果訪問的次數達到redis的最大連接數就會出現異常,JedisException: Could notget a resource from the pool