大厂的Redis锁竟然是这么用的,难怪不会超卖!
1 本地锁 常用的即 synchronize 或 Lock 等 JDK 自带的锁,只能锁住当前进程,仅适用于单体架构服务。 而在分布式多服务实例场景下必须使用分布式锁 2 分布式锁 2.1 分布式锁的原理 厕所占坑理论 可同时去一个地方“占坑”: 占到,就执行逻辑 否则等待,直到释放锁 可通过自旋方式自旋 “占坑”可以去Redis、DB、任何所有服务都能访问的地方。 2.2 分布式锁演进 一阶段 // 占分布式锁,去redis占坑 Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock", "111"); if(lock) { //加锁成功... 执行业务 Map<String, List<Catelog2Vo>> dataFromDb = getDataFromDb(); redisTemplate . delete( key: "lock");//fHßti return dataF romDb ; } else { // 加锁失败,重试。synchronized() // 休眠100ms重试...
