锁是一种安全机制。是对数据可靠性的保护。java
之前在单机部署模式的时候,经常使用java lock 。如今微服务的分布式。部署到不一样的机器上的服务须要经过中间件进行加锁。redis
最简单的模拟的场景是,两个台机子(或者两个服务)执行定时任务。本意是:这个定时任务只要执行一次就好。结果两个都执行了。安全
解决方案:分布式
利用redis做为中间件,实现分布式锁。考虑到可能中途出错,没法释放锁的问题。微服务
引用老钱的话spa
为了治理这个乱象,Redis 2.8 版本中做者加入了 set 指令的扩展参数,使得 setnx 和 expire 指令能够一块儿执行,完全解决了分布式锁的乱象。今后之后全部的第三方分布式锁 library 能够休息了。code
> set lock:codehole true ex 5 nx OK ... do something critical ... > del lock:codehole
上面这个指令就是 setnx 和 expire 组合在一块儿的原子指令,它就是分布式锁的奥义所在。... https://juejin.im 掘金 — 一个帮助开发者成长的社区中间件