原子操作、限流与分布式锁
Redis、缓存与异步任务#Python全栈#第十五阶段#Redis、缓存与异步任务#原子操作、限流与分布式锁约 749 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
INCR 等单条命令的原子性可以保证什么?
追问 GET 后在 Python 中加一再 SET 为什么存在竞态?单条命令原子是否等于多个系统整体原子?
MULTI/EXEC 与 WATCH 怎样组织并发修改?
追问 排队错误、执行错误和乐观冲突各怎样反馈?为什么 Redis 事务不能套用 MySQL 的失败回滚预期?
Lua 脚本怎样减少往返并保护多步操作?
追问 计数与 TTL 如何一起执行?脚本运行错误会自动撤销之前写入吗,为什么长脚本仍会影响其他请求?
固定窗口、滑动窗口与令牌桶限流各有什么特点?
追问 窗口边界突发、时间记录成本和允许短期突发如何影响选择?怎样明确用户、IP 与接口的组合维度?
限流计数与过期设置怎样避免留下永久键?
追问 INCR 后进程退出导致未执行 EXPIRE 时会发生什么?事务或脚本如何配合明确的窗口规则?
Redis 限流服务故障时,应该放行还是拒绝?
追问 公开搜索、登录尝试与高成本导出各有什么取舍?如何通过局部限制、降级和监控控制影响?
单 Redis 实例上的锁怎样用 SET NX 和过期时间获取?
追问 随机持有者标识、等待上限、锁 TTL 和业务耗时怎样约定?为什么 SETNX 后单独 EXPIRE 存在失败窗口?
释放锁为什么要原子比较持有者标识后再删除?
追问 原持有者暂停后锁过期,新持有者获得锁,此时旧持有者恢复会怎样误删?脚本或版本支持的比较删除怎样处理?
锁超时、续租与 fencing token 分别解决什么问题?
追问 旧持有者继续执行时,防止误删锁为何仍不足以阻止旧写入?下游资源需要怎样检查栅栏令牌?
Redis 分布式锁适合缓存重建,是否也足以保护资金与库存?
追问 网络分区、进程暂停、复制丢写和故障切换怎样影响互斥保证?为什么关键业务仍应依赖可验证的数据库条件与幂等约束?
核对资料: Redis 事务、Redis 分布式锁。