分布式锁redis,
分布式锁:
setnx key vel;返回1加锁成功,0说明已经加锁,
设置过去时间,sepire key time;
去重:场景一样,返回1说明已处理。
提升性能,不同账户不同锁:
private static final MapTASK_LOCK_MAP = new HashMap<>();
public Lock getLock(Long taskId) {
return TASK_LOCK_MAP.getOrDefault(taskId, new ReentrantLock());
}
public void removeLock(Long taskId) {
TASK_LOCK_MAP.remove(taskId);
}
Lock lock = evaluateTaskLock.getLock(task.getId());
try {
lock.lock();
manualTaskTimePointMGService.addPortraitTimePoint(drawEvaluateTaskId, TimePointType.PAUSE);
} catch (Exception e) {
log.error("暂停异常, taskId: {}", drawEvaluateTaskId, e);
} finally {
lock.unlock();
}