FWQ
使用RedisAtomicInteger计数出现少计问题及解决
使用RedisAtomicInteger计数出现少计问题及解决 0浏览 收藏 一分耕耘,一分收获!既然都打开这篇《使用RedisAtomicInteger计数出现少计问题及解决》,就坚持看下去,学下去吧!本文主要会给大家讲到RedisAtomicInteger计数、少计等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新数据库相关的内容,希望对大家都有所帮助! RedisAtomicInteger计数出现少计 最近工作中遇到了这样一个场景 同一个外部单号生成了多张出库单,等待所有相关的出库单都出库成功后回复成功消息外部系统调用方。因为是分布式布系统,我使用了RedisAtomicInteger计数器来判断出库单是否全部完成,数量达成时回复成功消息给外部系统调用方。 在本地测试和测试环境测试时都没有发现问题,到了生产环境后,发现偶尔出现所有出库单都已经出库,但没有回复消息给调用方,如:出库单15张,但计数器只有14。 分析 开始以为是有单据漏计算了,通过日志分析,发现所有的出库单都统计进去了。 然后通过增加打开调试日志,发现最开始的2张出库单统计后的值都为1,少了1个。 原因 redis的increment是原子性,但new RedisAtomicInteger时会调用set方法来设置初始值,set方法是可以被后面的方法覆盖的。 edisAtomicInteger redisAtomicInt = new RedisAtomicInteger(countKey, redisTemplate.getConnectionFactory()); // spring-data-redis-1.8.13原码 public RedisAtomicInteger(String redisCounter, RedisConnectionFactory factory)…