并发库存控制
例如库存只剩余一个 同时进入两个请求 数据可能出现负值的情况
解决方案
字段标记unsigned
在数据库中将字段定义为unsigned (其中阿里巴巴开发规约中提到了这一点:数据库中非负的字段使用该关键字 阿里巴巴规约)
1 | repository INT(11) unsigned DEFAULT '0'COMMENT '库存' |
程序中 如果数据已经为0 程序依然请求减一的操作 数据会出现DataIntegrityViolationException 异常
1 | try { |
通过这种方式可以保证数据的正确性
更新判断
1 | update product set num=num-1 where num > 0; |
采用这种方式 只有当库存>0的时候才能够进行更新
比较与第一种 更加轻便 使用库做最后一层拦截
redis等缓存
可以使用redis等缓存技术 实现对库存的控制 同时高效的处理并发的问题 例如秒杀等活动 防止商品超卖
未经作者允许 请勿转载,谢谢 :)