随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的Java API并不能提供分布式锁的能力。为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题。
分布式锁主流的实现方案:
redis:命令。
# set sku:1:info "OK" NX PX 1000
命令解析
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脚本。
使用redisTemplate集群模式下执行lua脚本报错的问题解决过程
redis集群执行lua