十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

分布式锁Redisson实战,解决订单超卖并发问题

分布式锁Redisson实战,解决订单超卖并发问题 做电商后端开发商品超卖应该算是老生常谈的并发难题了。之前我参与过一个秒杀小活动库存设置 100 件最后下单成功 130 多单直接出现超卖后续还要人工处理退款给业务造成不小麻烦。一开始我们用数据库乐观锁去处理并发量不高的时候还好一旦请求量上来大量请求直接打在数据库数据库 CPU 飙升接口响应直接超时。后来调研选型最终采用 Redisson 分布式锁来解决该问题。今天结合线上踩过的坑把 Redisson 分布式锁落地完整过程记录下来。一、为什么不能直接用原生 Redis 实现分布式锁很多同学刚开始会直接用SETNX手写 Redis 锁。写起来看着简单但是坑非常多。比如锁超时、业务还没执行完锁就释放锁被其他线程误释放主从切换锁丢失等一堆问题。如果自己全部去处理这些边界代码会写的非常复杂稍有遗漏就会出线上故障。而 Redisson 是 Redis 官方推荐的 Java 客户端它把锁续期、锁可重入、锁释放、主从等各种复杂逻辑全部封装好了我们直接调用 API 即可生产环境稳定性要高很多。二、项目引入 Redisson 依赖SpringBoot 项目pom.xml 引入依赖注意版本要和你的 SpringBoot 版本兼容。dependency groupIdorg.redisson/groupId artifactIdredisson‑spring‑boot‑starter/artifactId version3.23.5/version /dependencyapplication.yml 配置 Redis 连接信息spring: redis: host: 127.0.0.1 port: 6379 password: database: 0三、订单扣库存超卖错误示例问题代码先看一段有并发问题的代码这也是很多新手容易写出的业务逻辑。Service public class OrderServiceImpl implements OrderService { Autowired private GoodsMapper goodsMapper; Autowired private OrderMapper orderMapper; Override Transactional public void createOrder(Long goodsId) { //1.查询库存 Goods goods goodsMapper.selectById(goodsId); if(goods.getStock() 0){ throw new RuntimeException(商品库存不足); } //2.扣减库存 goods.setStock(goods.getStock() -1); goodsMapper.updateById(goods); //3.生成订单 Order order new Order(); order.setGoodsId(goodsId); orderMapper.insert(order); } }问题高并发场景多个线程同时读到同一个库存数值全部通过库存判断就会产生超卖。单纯数据库事务解决不了这个问题事务只能保证原子性不能挡住并发读取。四、Redisson 分布式锁改造后的业务代码这里使用 Redisson 可重入锁RLock直接上锁之后再执行库存判断和下单逻辑。Service public class OrderServiceImpl implements OrderService { Autowired private GoodsMapper goodsMapper; Autowired private OrderMapper orderMapper; Autowired private RedissonClient redissonClient; Override Transactional public void createOrder(Long goodsId) { //定义锁key同一个商品用同一个key String lockKey lock:goods: goodsId; RLock rLock redissonClient.getLock(lockKey); try { //尝试获取锁等待3秒锁自动释放时间30秒 boolean getLock rLock.tryLock(3,30, TimeUnit.SECONDS); if(!getLock){ throw new RuntimeException(请求繁忙请稍后重试); } //获取锁成功执行业务 Goods goods goodsMapper.selectById(goodsId); if(goods.getStock() 0){ throw new RuntimeException(商品库存不足); } goods.setStock(goods.getStock() -1); goodsMapper.updateById(goods); Order order new Order(); order.setGoodsId(goodsId); orderMapper.insert(order); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException(获取锁异常); } finally { //必须判断当前线程持有锁才释放防止误释放别人的锁 if(rLock.isHeldByCurrentThread()){ rLock.unlock(); } } } }这里有个细节finally释放锁的时候一定要判断isHeldByCurrentThread()。如果业务执行异常锁已经过期释放直接调用 unlock会把其他线程拿到的锁给释放掉这个坑不少人踩过。Redisson 自带的看门狗机制如果业务执行时间超过设置的 30 秒会自动给锁续期避免业务没跑完锁提前释放这也是手写 SETNX 锁很难实现的能力。五、实际生产落地需要注意的几个坑锁粒度不要太大不要直接写一个全局锁所有商品共用同一个 key。不同商品使用不同的 lockKey例如lock:goods:{goodsId}并发性能会高很多。分布式锁不能完全替代数据库层面防护分布式锁也不是万无一失。Redis 主从切换锁有可能丢失。建议数据库层面加上库存版本号乐观锁作为兜底双重防护杜绝超卖。简单乐观锁更新示例update goods set stock stock‑1, version version1 where id #{goodsId} and stock0 and version #{version};锁和事务顺序问题锁要加在事务外面。如果锁在事务内部事务还没提交完成锁就释放其他线程读到未提交的数据依旧会出现并发问题。区分锁类型普通抢购场景用可重入锁 RLock读写场景可以考虑 Redisson 读写锁如果是集群环境要配置 Redisson 的 Redis 集群模式不要单机配置。六、总结超卖问题本质就是并发下共享资源竞争。数据库乐观锁适合并发压力一般的场景当 QPS 较高大量请求冲击数据库就需要引入分布式锁。Redisson 把分布式锁里面各种棘手问题锁续期、可重入、防止误释放、异常处理全部封装好了开发不用重复造轮子。但千万不要觉得上了分布式锁就万事大吉。Redis 毕竟是中间件存在网络、主从切换等不可控因素。生产环境建议Redisson 分布式锁 数据库乐观锁双重兜底最大程度避免超卖事故。实际项目里面还可以继续优化结合 MQ 异步削峰把下单逻辑异步化进一步提升系统承载能力。Csdn.otftcf.cN/Article/details/23979.sHtMLCsdn.otftcf.cN/Article/details/01851.sHtMLCsdn.otftcf.cN/Article/details/86259.sHtMLCsdn.otftcf.cN/Article/details/45039.sHtMLCsdn.otftcf.cN/Article/details/03930.sHtMLCsdn.otftcf.cN/Article/details/96005.sHtMLCsdn.otftcf.cN/Article/details/09542.sHtMLCsdn.otftcf.cN/Article/details/03508.sHtMLCsdn.otftcf.cN/Article/details/68259.sHtMLCsdn.otftcf.cN/Article/details/41700.sHtMLCsdn.otftcf.cN/Article/details/43631.sHtMLCsdn.otftcf.cN/Article/details/26368.sHtMLCsdn.otftcf.cN/Article/details/53243.sHtMLCsdn.otftcf.cN/Article/details/29143.sHtMLCsdn.otftcf.cN/Article/details/52681.sHtMLCsdn.otftcf.cN/Article/details/37799.sHtMLCsdn.otftcf.cN/Article/details/32842.sHtMLCsdn.otftcf.cN/Article/details/46487.sHtMLCsdn.otftcf.cN/Article/details/31573.sHtMLCsdn.otftcf.cN/Article/details/26301.sHtMLCsdn.otftcf.cN/Article/details/33388.sHtMLCsdn.otftcf.cN/Article/details/98462.sHtMLCsdn.otftcf.cN/Article/details/14709.sHtMLCsdn.otftcf.cN/Article/details/31135.sHtMLCsdn.otftcf.cN/Article/details/09590.sHtMLCsdn.otftcf.cN/Article/details/28372.sHtMLCsdn.otftcf.cN/Article/details/08326.sHtMLCsdn.otftcf.cN/Article/details/29296.sHtMLCsdn.otftcf.cN/Article/details/47713.sHtMLCsdn.otftcf.cN/Article/details/92396.sHtMLCsdn.otftcf.cN/Article/details/86993.sHtMLCsdn.otftcf.cN/Article/details/22430.sHtMLCsdn.otftcf.cN/Article/details/49670.sHtMLCsdn.otftcf.cN/Article/details/80132.sHtMLCsdn.otftcf.cN/Article/details/70169.sHtMLCsdn.otftcf.cN/Article/details/42557.sHtMLCsdn.otftcf.cN/Article/details/26626.sHtMLCsdn.otftcf.cN/Article/details/62196.sHtMLCsdn.otftcf.cN/Article/details/64315.sHtMLCsdn.otftcf.cN/Article/details/12170.sHtMLCsdn.otftcf.cN/Article/details/16667.sHtMLCsdn.otftcf.cN/Article/details/52431.sHtMLCsdn.otftcf.cN/Article/details/73167.sHtMLCsdn.otftcf.cN/Article/details/44001.sHtMLCsdn.otftcf.cN/Article/details/32053.sHtMLCsdn.otftcf.cN/Article/details/87683.sHtMLCsdn.otftcf.cN/Article/details/96883.sHtMLCsdn.otftcf.cN/Article/details/78010.sHtMLCsdn.otftcf.cN/Article/details/77173.sHtMLCsdn.otftcf.cN/Article/details/81350.sHtMLCsdn.otftcf.cN/Article/details/91726.sHtMLCsdn.otftcf.cN/Article/details/10117.sHtMLCsdn.otftcf.cN/Article/details/49112.sHtMLCsdn.otftcf.cN/Article/details/73668.sHtMLCsdn.otftcf.cN/Article/details/35555.sHtMLCsdn.otftcf.cN/Article/details/84266.sHtMLCsdn.otftcf.cN/Article/details/18159.sHtMLCsdn.otftcf.cN/Article/details/53697.sHtMLCsdn.otftcf.cN/Article/details/41263.sHtMLCsdn.otftcf.cN/Article/details/02516.sHtMLCsdn.otftcf.cN/Article/details/81008.sHtMLCsdn.otftcf.cN/Article/details/31484.sHtMLCsdn.otftcf.cN/Article/details/80416.sHtMLCsdn.otftcf.cN/Article/details/48781.sHtMLCsdn.otftcf.cN/Article/details/54090.sHtMLCsdn.otftcf.cN/Article/details/07634.sHtMLCsdn.otftcf.cN/Article/details/02660.sHtMLCsdn.otftcf.cN/Article/details/45964.sHtMLCsdn.otftcf.cN/Article/details/72954.sHtMLCsdn.otftcf.cN/Article/details/49932.sHtMLCsdn.otftcf.cN/Article/details/38109.sHtMLCsdn.otftcf.cN/Article/details/34930.sHtMLCsdn.otftcf.cN/Article/details/16979.sHtMLCsdn.otftcf.cN/Article/details/08181.sHtMLCsdn.otftcf.cN/Article/details/81858.sHtMLCsdn.otftcf.cN/Article/details/10695.sHtMLCsdn.otftcf.cN/Article/details/04382.sHtMLCsdn.otftcf.cN/Article/details/68399.sHtMLCsdn.otftcf.cN/Article/details/03077.sHtMLCsdn.otftcf.cN/Article/details/87942.sHtMLCsdn.otftcf.cN/Article/details/48596.sHtMLCsdn.otftcf.cN/Article/details/35596.sHtMLCsdn.otftcf.cN/Article/details/87671.sHtMLCsdn.otftcf.cN/Article/details/32704.sHtMLCsdn.otftcf.cN/Article/details/56154.sHtMLCsdn.otftcf.cN/Article/details/64787.sHtMLCsdn.otftcf.cN/Article/details/80695.sHtMLCsdn.otftcf.cN/Article/details/66814.sHtMLCsdn.otftcf.cN/Article/details/96017.sHtMLCsdn.otftcf.cN/Article/details/97934.sHtMLCsdn.otftcf.cN/Article/details/40554.sHtMLCsdn.otftcf.cN/Article/details/13217.sHtMLCsdn.otftcf.cN/Article/details/39354.sHtMLCsdn.otftcf.cN/Article/details/05694.sHtMLCsdn.otftcf.cN/Article/details/54209.sHtMLCsdn.otftcf.cN/Article/details/97485.sHtMLCsdn.otftcf.cN/Article/details/27044.sHtMLCsdn.otftcf.cN/Article/details/78947.sHtMLCsdn.otftcf.cN/Article/details/31397.sHtMLCsdn.otftcf.cN/Article/details/51508.sHtMLCsdn.otftcf.cN/Article/details/95487.sHtMLCsdn.otftcf.cN/Article/details/52507.sHtMLCsdn.otftcf.cN/Article/details/17509.sHtMLCsdn.otftcf.cN/Article/details/55825.sHtMLCsdn.otftcf.cN/Article/details/72473.sHtMLCsdn.otftcf.cN/Article/details/01597.sHtMLCsdn.otftcf.cN/Article/details/21816.sHtMLCsdn.otftcf.cN/Article/details/96053.sHtMLCsdn.otftcf.cN/Article/details/80368.sHtMLCsdn.otftcf.cN/Article/details/40856.sHtMLCsdn.otftcf.cN/Article/details/96896.sHtMLCsdn.otftcf.cN/Article/details/89327.sHtMLCsdn.otftcf.cN/Article/details/71057.sHtMLCsdn.otftcf.cN/Article/details/49181.sHtMLCsdn.otftcf.cN/Article/details/10540.sHtMLCsdn.otftcf.cN/Article/details/94310.sHtMLCsdn.otftcf.cN/Article/details/19718.sHtMLCsdn.otftcf.cN/Article/details/48328.sHtMLCsdn.otftcf.cN/Article/details/52948.sHtMLCsdn.otftcf.cN/Article/details/17849.sHtMLCsdn.otftcf.cN/Article/details/87762.sHtMLCsdn.otftcf.cN/Article/details/67646.sHtMLCsdn.otftcf.cN/Article/details/12087.sHtMLCsdn.otftcf.cN/Article/details/45653.sHtMLCsdn.otftcf.cN/Article/details/50463.sHtMLCsdn.otftcf.cN/Article/details/72458.sHtMLCsdn.otftcf.cN/Article/details/23479.sHtMLCsdn.otftcf.cN/Article/details/28745.sHtMLCsdn.otftcf.cN/Article/details/23736.sHtMLCsdn.otftcf.cN/Article/details/13037.sHtMLCsdn.otftcf.cN/Article/details/07815.sHtMLCsdn.otftcf.cN/Article/details/16100.sHtMLCsdn.otftcf.cN/Article/details/11657.sHtMLCsdn.otftcf.cN/Article/details/59554.sHtMLCsdn.otftcf.cN/Article/details/75620.sHtMLCsdn.otftcf.cN/Article/details/98442.sHtMLCsdn.otftcf.cN/Article/details/72996.sHtMLCsdn.otftcf.cN/Article/details/54153.sHtMLCsdn.otftcf.cN/Article/details/05563.sHtMLCsdn.otftcf.cN/Article/details/32834.sHtMLCsdn.otftcf.cN/Article/details/06743.sHtMLCsdn.otftcf.cN/Article/details/50318.sHtMLCsdn.otftcf.cN/Article/details/39199.sHtMLCsdn.otftcf.cN/Article/details/06334.sHtMLCsdn.otftcf.cN/Article/details/70916.sHtMLCsdn.otftcf.cN/Article/details/01456.sHtMLCsdn.otftcf.cN/Article/details/22133.sHtMLCsdn.otftcf.cN/Article/details/21355.sHtMLCsdn.otftcf.cN/Article/details/65337.sHtMLCsdn.otftcf.cN/Article/details/08874.sHtMLCsdn.otftcf.cN/Article/details/15346.sHtMLCsdn.otftcf.cN/Article/details/61001.sHtMLCsdn.otftcf.cN/Article/details/83231.sHtMLCsdn.otftcf.cN/Article/details/35410.sHtMLCsdn.otftcf.cN/Article/details/38547.sHtMLCsdn.otftcf.cN/Article/details/13730.sHtMLCsdn.otftcf.cN/Article/details/18038.sHtMLCsdn.otftcf.cN/Article/details/07964.sHtMLCsdn.otftcf.cN/Article/details/68073.sHtMLCsdn.otftcf.cN/Article/details/97380.sHtMLCsdn.otftcf.cN/Article/details/10373.sHtMLCsdn.otftcf.cN/Article/details/07387.sHtMLCsdn.otftcf.cN/Article/details/11740.sHtMLCsdn.otftcf.cN/Article/details/44462.sHtMLCsdn.otftcf.cN/Article/details/17056.sHtMLCsdn.otftcf.cN/Article/details/99535.sHtMLCsdn.otftcf.cN/Article/details/38460.sHtMLCsdn.otftcf.cN/Article/details/69853.sHtMLCsdn.otftcf.cN/Article/details/95709.sHtMLCsdn.otftcf.cN/Article/details/62756.sHtMLCsdn.otftcf.cN/Article/details/69651.sHtMLCsdn.otftcf.cN/Article/details/45152.sHtMLCsdn.otftcf.cN/Article/details/88076.sHtMLCsdn.otftcf.cN/Article/details/08307.sHtMLCsdn.otftcf.cN/Article/details/28729.sHtMLCsdn.otftcf.cN/Article/details/31845.sHtMLCsdn.otftcf.cN/Article/details/82680.sHtMLCsdn.otftcf.cN/Article/details/85639.sHtMLCsdn.otftcf.cN/Article/details/20795.sHtMLCsdn.otftcf.cN/Article/details/60202.sHtMLCsdn.otftcf.cN/Article/details/32287.sHtMLCsdn.otftcf.cN/Article/details/27956.sHtMLCsdn.otftcf.cN/Article/details/43084.sHtMLCsdn.otftcf.cN/Article/details/17386.sHtMLCsdn.otftcf.cN/Article/details/24710.sHtMLCsdn.otftcf.cN/Article/details/07056.sHtMLCsdn.otftcf.cN/Article/details/41540.sHtMLCsdn.otftcf.cN/Article/details/47551.sHtMLCsdn.otftcf.cN/Article/details/14605.sHtMLCsdn.otftcf.cN/Article/details/02323.sHtMLCsdn.otftcf.cN/Article/details/68584.sHtMLCsdn.otftcf.cN/Article/details/19625.sHtMLCsdn.otftcf.cN/Article/details/92536.sHtMLCsdn.otftcf.cN/Article/details/40090.sHtMLCsdn.otftcf.cN/Article/details/06626.sHtMLCsdn.otftcf.cN/Article/details/86829.sHtMLCsdn.otftcf.cN/Article/details/95896.sHtMLCsdn.otftcf.cN/Article/details/21481.sHtMLCsdn.otftcf.cN/Article/details/79061.sHtMLCsdn.otftcf.cN/Article/details/87142.sHtMLCsdn.otftcf.cN/Article/details/49016.sHtMLCsdn.otftcf.cN/Article/details/88651.sHtMLCsdn.otftcf.cN/Article/details/44621.sHtMLCsdn.otftcf.cN/Article/details/61641.sHtMLCsdn.otftcf.cN/Article/details/81629.sHtMLCsdn.otftcf.cN/Article/details/28469.sHtMLCsdn.otftcf.cN/Article/details/08291.sHtMLCsdn.otftcf.cN/Article/details/83635.sHtMLCsdn.otftcf.cN/Article/details/16256.sHtMLCsdn.otftcf.cN/Article/details/05819.sHtMLCsdn.otftcf.cN/Article/details/34924.sHtMLCsdn.otftcf.cN/Article/details/70613.sHtMLCsdn.otftcf.cN/Article/details/03429.sHtMLCsdn.otftcf.cN/Article/details/14900.sHtMLCsdn.otftcf.cN/Article/details/56319.sHtMLCsdn.otftcf.cN/Article/details/42601.sHtMLCsdn.otftcf.cN/Article/details/97066.sHtMLCsdn.otftcf.cN/Article/details/78208.sHtMLCsdn.otftcf.cN/Article/details/46005.sHtMLCsdn.otftcf.cN/Article/details/13604.sHtMLCsdn.otftcf.cN/Article/details/25692.sHtMLCsdn.otftcf.cN/Article/details/01682.sHtMLCsdn.otftcf.cN/Article/details/71608.sHtMLCsdn.otftcf.cN/Article/details/62713.sHtMLCsdn.otftcf.cN/Article/details/96572.sHtMLCsdn.otftcf.cN/Article/details/68100.sHtMLCsdn.otftcf.cN/Article/details/24930.sHtMLCsdn.otftcf.cN/Article/details/71285.sHtMLCsdn.otftcf.cN/Article/details/45304.sHtMLCsdn.otftcf.cN/Article/details/47398.sHtMLCsdn.otftcf.cN/Article/details/98880.sHtMLCsdn.otftcf.cN/Article/details/04272.sHtMLCsdn.otftcf.cN/Article/details/40180.sHtMLCsdn.otftcf.cN/Article/details/92898.sHtMLCsdn.otftcf.cN/Article/details/22485.sHtMLCsdn.otftcf.cN/Article/details/15623.sHtMLCsdn.otftcf.cN/Article/details/00005.sHtMLCsdn.otftcf.cN/Article/details/93926.sHtMLCsdn.otftcf.cN/Article/details/40654.sHtMLCsdn.otftcf.cN/Article/details/25135.sHtMLCsdn.otftcf.cN/Article/details/22546.sHtMLCsdn.otftcf.cN/Article/details/55708.sHtMLCsdn.otftcf.cN/Article/details/20531.sHtMLCsdn.otftcf.cN/Article/details/20212.sHtMLCsdn.otftcf.cN/Article/details/01523.sHtMLCsdn.otftcf.cN/Article/details/92810.sHtMLCsdn.otftcf.cN/Article/details/95947.sHtMLCsdn.otftcf.cN/Article/details/36445.sHtMLCsdn.otftcf.cN/Article/details/42454.sHtMLCsdn.otftcf.cN/Article/details/70617.sHtMLCsdn.otftcf.cN/Article/details/14485.sHtMLCsdn.otftcf.cN/Article/details/85106.sHtMLCsdn.otftcf.cN/Article/details/64502.sHtMLCsdn.otftcf.cN/Article/details/89422.sHtMLCsdn.otftcf.cN/Article/details/15062.sHtMLCsdn.otftcf.cN/Article/details/88862.sHtMLCsdn.otftcf.cN/Article/details/22217.sHtMLCsdn.otftcf.cN/Article/details/36578.sHtMLCsdn.otftcf.cN/Article/details/27542.sHtMLCsdn.otftcf.cN/Article/details/52888.sHtMLCsdn.otftcf.cN/Article/details/81389.sHtMLCsdn.otftcf.cN/Article/details/06018.sHtMLCsdn.otftcf.cN/Article/details/17286.sHtMLCsdn.otftcf.cN/Article/details/46041.sHtMLCsdn.otftcf.cN/Article/details/58331.sHtMLCsdn.otftcf.cN/Article/details/43907.sHtMLCsdn.otftcf.cN/Article/details/24533.sHtMLCsdn.otftcf.cN/Article/details/71350.sHtMLCsdn.otftcf.cN/Article/details/16291.sHtMLCsdn.otftcf.cN/Article/details/87237.sHtMLCsdn.otftcf.cN/Article/details/70559.sHtMLCsdn.otftcf.cN/Article/details/08486.sHtMLCsdn.otftcf.cN/Article/details/57979.sHtMLCsdn.otftcf.cN/Article/details/86246.sHtMLCsdn.otftcf.cN/Article/details/83094.sHtMLCsdn.otftcf.cN/Article/details/51934.sHtMLCsdn.otftcf.cN/Article/details/28453.sHtMLCsdn.otftcf.cN/Article/details/63835.sHtMLCsdn.otftcf.cN/Article/details/39699.sHtMLCsdn.otftcf.cN/Article/details/72840.sHtMLCsdn.otftcf.cN/Article/details/03446.sHtMLCsdn.otftcf.cN/Article/details/61223.sHtMLCsdn.otftcf.cN/Article/details/83903.sHtMLCsdn.otftcf.cN/Article/details/61242.sHtMLCsdn.otftcf.cN/Article/details/60933.sHtMLCsdn.otftcf.cN/Article/details/11359.sHtMLCsdn.otftcf.cN/Article/details/94738.sHtMLCsdn.otftcf.cN/Article/details/27213.sHtMLCsdn.otftcf.cN/Article/details/63457.sHtMLCsdn.otftcf.cN/Article/details/06926.sHtMLCsdn.otftcf.cN/Article/details/73394.sHtMLCsdn.otftcf.cN/Article/details/31557.sHtMLCsdn.otftcf.cN/Article/details/26931.sHtMLCsdn.otftcf.cN/Article/details/10878.sHtMLCsdn.otftcf.cN/Article/details/38429.sHtMLCsdn.otftcf.cN/Article/details/33460.sHtMLCsdn.otftcf.cN/Article/details/97261.sHtMLCsdn.otftcf.cN/Article/details/78731.sHtMLCsdn.otftcf.cN/Article/details/24082.sHtMLCsdn.otftcf.cN/Article/details/82929.sHtMLCsdn.otftcf.cN/Article/details/84643.sHtMLCsdn.otftcf.cN/Article/details/67272.sHtMLCsdn.otftcf.cN/Article/details/24056.sHtMLCsdn.otftcf.cN/Article/details/47766.sHtMLCsdn.otftcf.cN/Article/details/10373.sHtMLCsdn.otftcf.cN/Article/details/26267.sHtMLCsdn.otftcf.cN/Article/details/72880.sHtMLCsdn.otftcf.cN/Article/details/00086.sHtMLCsdn.otftcf.cN/Article/details/32486.sHtMLCsdn.otftcf.cN/Article/details/23070.sHtMLCsdn.otftcf.cN/Article/details/98182.sHtMLCsdn.otftcf.cN/Article/details/15123.sHtMLCsdn.otftcf.cN/Article/details/02035.sHtMLCsdn.otftcf.cN/Article/details/13350.sHtMLCsdn.otftcf.cN/Article/details/02550.sHtMLCsdn.otftcf.cN/Article/details/35640.sHtMLCsdn.otftcf.cN/Article/details/78262.sHtMLCsdn.otftcf.cN/Article/details/20559.sHtMLCsdn.otftcf.cN/Article/details/11268.sHtMLCsdn.otftcf.cN/Article/details/01342.sHtMLCsdn.otftcf.cN/Article/details/64932.sHtMLCsdn.otftcf.cN/Article/details/48416.sHtMLCsdn.otftcf.cN/Article/details/52606.sHtMLCsdn.otftcf.cN/Article/details/83584.sHtMLCsdn.otftcf.cN/Article/details/20033.sHtMLCsdn.otftcf.cN/Article/details/78397.sHtMLCsdn.otftcf.cN/Article/details/26282.sHtMLCsdn.otftcf.cN/Article/details/40951.sHtMLCsdn.otftcf.cN/Article/details/72861.sHtMLCsdn.otftcf.cN/Article/details/21546.sHtMLCsdn.rsyais.cN/Article/details/80504.sHtMLCsdn.rsyais.cN/Article/details/83638.sHtMLCsdn.rsyais.cN/Article/details/74776.sHtMLCsdn.rsyais.cN/Article/details/33504.sHtMLCsdn.rsyais.cN/Article/details/07946.sHtMLCsdn.rsyais.cN/Article/details/72255.sHtMLCsdn.rsyais.cN/Article/details/71109.sHtMLCsdn.rsyais.cN/Article/details/36296.sHtMLCsdn.rsyais.cN/Article/details/66243.sHtMLCsdn.rsyais.cN/Article/details/16142.sHtMLCsdn.rsyais.cN/Article/details/48322.sHtMLCsdn.rsyais.cN/Article/details/54142.sHtMLCsdn.rsyais.cN/Article/details/47300.sHtMLCsdn.rsyais.cN/Article/details/63175.sHtMLCsdn.rsyais.cN/Article/details/89715.sHtMLCsdn.rsyais.cN/Article/details/50003.sHtMLCsdn.rsyais.cN/Article/details/87926.sHtMLCsdn.rsyais.cN/Article/details/96622.sHtMLCsdn.rsyais.cN/Article/details/94596.sHtMLCsdn.rsyais.cN/Article/details/85193.sHtMLCsdn.rsyais.cN/Article/details/70722.sHtMLCsdn.rsyais.cN/Article/details/13563.sHtMLCsdn.rsyais.cN/Article/details/93336.sHtMLCsdn.rsyais.cN/Article/details/93309.sHtMLCsdn.rsyais.cN/Article/details/86437.sHtMLCsdn.rsyais.cN/Article/details/96859.sHtMLCsdn.rsyais.cN/Article/details/60655.sHtMLCsdn.rsyais.cN/Article/details/73716.sHtMLCsdn.rsyais.cN/Article/details/80554.sHtMLCsdn.rsyais.cN/Article/details/68019.sHtMLCsdn.rsyais.cN/Article/details/57105.sHtMLCsdn.rsyais.cN/Article/details/91798.sHtMLCsdn.rsyais.cN/Article/details/32069.sHtMLCsdn.rsyais.cN/Article/details/75585.sHtMLCsdn.rsyais.cN/Article/details/04547.sHtMLCsdn.rsyais.cN/Article/details/83270.sHtMLCsdn.rsyais.cN/Article/details/77032.sHtMLCsdn.rsyais.cN/Article/details/87622.sHtMLCsdn.rsyais.cN/Article/details/64620.sHtML
返回列表