redis的setNx命令可以获取redis中的锁,这里见到了一种自旋锁的写法。
redis可以去做分布式锁,但要注意锁的粒度,和最后删除时网络抖动的影响。
其中封装自旋锁的好处:可以在一个线程中重试的去获取锁,减少线程上下文切换带来的性能消耗,但要注意自旋锁重试次数的合理设置,过大会造成cpu占用率过大。
/**
* redis单点获取锁 线程sleep获取自旋锁 注意retryTimes设置的合理性
* @param timeout
* @param sleepTime
* @param retryTimes
* @return
*/
public Boolean getSpinLock(long timeout, long sleepTime, int retryTime