[email protected]最新版本开发企业级出行项目网盘分享

download:[email protected]最新版本开发企业级出行项目网盘分享

为什么需求散布式锁
用户下单
锁住 uid,避免反复下单。

库存扣减
锁住库存,避免超卖。

余额扣减
锁住账户,避免并发操作。
散布式系统中共享同一个资源时常常需求散布式锁来保证变卦资源分歧性。

散布式锁需求具备特性
排他性
锁的根本特性,并且只能被第一个持有者持有。

防死锁
高并发场景下临界资源一旦发作死锁十分难以排查,通常能够经过设置超时时间到期自动释放锁来躲避。

可重入
锁持有者支持可重入,避免锁持有者再次重入时锁被超时释放。

高性能高可用
锁是代码运转的关键前置节点,一旦不可用则业务直接就报毛病了。高并发场景下,高性能高可用是根本请求。

完成 Redis 锁应先控制哪些学问点
set 命令
SET key value [EX seconds] [PX milliseconds] [NX|XX]
EX second :设置键的过时时间为 second 秒。 SET key value EX second 效果同等于 SETEX key second value 。
PX millisecond :设置键的过时时间为 millisecond 毫秒。 SET key value PX millisecond 效果同等于 PSETEX key millisecond value 。
NX :只在键不存在时,才对键停止设置操作。 SET key value NX 效果同等于 SETNX key value 。
XX :只在键曾经存在时,才对键停止设置操作。
Redis.lua 脚本
运用 redis lua 脚本能将一系列命令操作封装成 pipline 完成整体操作的原子性。

go-zero 散布式锁 RedisLock 源码剖析
core/stores/redis/redislock.go

加锁流程

你可能感兴趣的:(taro)