尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
分布式锁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
RELATED

相关推荐

新手必看!避开90%人踩过的for循环陷阱

新手必看!避开90%人踩过的for循环陷阱

一、90% 新手都踩过的坑,你可能也在其中 从事数据处理、脚本开发工作的人, 差不多都经历过这般崩溃之时: 满心欢喜地去加载相关数据集, 精心写好 for 循环语句之后, 点击运行按钮, 然而脚本却长时间毫无反应, 电脑运行得愈发卡顿, 直至最后直接死机——并非代码编写…

📅 2026/9/10 8:24:29
3步修复Visual C++运行库兼容性问题,这个免费工具一次装齐2005到2022全部版本

3步修复Visual C++运行库兼容性问题,这个免费工具一次装齐2005到2022全部版本

3步修复Visual C运行库兼容性问题,这个免费工具一次装齐2005到2022全部版本 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 当游戏突然闪退、Office …

📅 2026/10/5 21:16:13
老电脑装 Windows 11 的免费完整指南:MediaCreationTool.bat 一键绕过 TPM 限制

老电脑装 Windows 11 的免费完整指南:MediaCreationTool.bat 一键绕过 TPM 限制

老电脑装 Windows 11 的免费完整指南:MediaCreationTool.bat 一键绕过 TPM 限制 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCr…

📅 2026/9/5 17:59:25
MORE NEWS

更多资讯

📰

Redis Stream:从List队列到可靠消息队列的选型进阶

凌晨三点,我被一条“消息积压”的监控告警从梦里拽起来。打开面板一看,积压的倒不是队列本身,而是一批已经被消费者读走的订单任务,在消费者进程崩溃之后,像从来没有存在过一样。那是一个用得很“经典”的List队列方案…

📰

C#电动车租赁会员管理系统课设拆解:三层架构与计费实战

简介:一份面向高校计算机相关专业的电动车租赁会员管理系统完整项目包,覆盖会员管理、租赁流程、后台数据维护等典型业务,适合作为毕业设计、课程设计或C#项目实战练习。压缩包共381个文件,总大小52.61MB,核心为176个C…

📰

云效 Region 版落地实战:研发数据不出域的合规要求与迁域路径

开头先讲个我自己的判断:最近云效正式发布了 Region 版,这事情在不少做研发效能和 DevOps 的圈子里讨论度很高。很多人第一反应是“这不就是私有化部署换了个名字吗”,但如果你手头正在处理研发数据合规、数据驻留这类需求,就会明…

📰

开发者必看的提示词工程实战指南:让AI代码产出效率翻倍

最近总有开发者朋友问我同一个问题:明明都在用AI辅助写代码,为什么别人一天的产出能顶我三天,我却总觉得AI像个只会复读的实习生?答案十有八九出在提示词上。 提示词工程(Prompt Engineering)这几个字听起…

📰

健康管理系统后端架构设计:从技术选型到性能优化实战指南

1. 为什么健康管理系统要把后端单独拎出来设计 先说个背景。健康管理系统跟普通管理系统最大的区别在于:它不只是存数据、做增删改查。一次体检报告可能包含几十项指标,一个用户的健康档案可能有运动、睡眠、饮食、体征、慢病管理等多维度的数据&#xf…

📰

JSP供应链管理系统源码解析:从导入到进阶改造

简介:这份资源是面向计算机专业学生与Java Web初学者的一套百货中心供应链管理系统完整毕业设计资料,包含可运行的JSP源码、数据库脚本与WORD论文文档,适合用于课程设计、毕业设计参考或供应链管理系统的学习实践。压缩包共10个文件&#xff…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬