伪代码 // 获取锁getLock() {// 是否有正在执行的线程 boolean hasLock = false; try { hasLock = redisClient.setnx("lockKey", "ing") == 1; if (hasLock) { redisClient.expire("lockKey", 60*60);//一小时 } } catch (Exception e) {
// 获取锁 getLock() { // 是否有正在执行的线程 boolean hasLock = false; try { hasLock = redisClient.setnx("lockKey", "ing") == 1; if (hasLock) { redisClient.expire("lockKey", 60*60);//一小时 } } catch (Exception e) { logger.error("redis.lock.setnx is error", e); // 避免成功获取到锁,但是未成功设置过期时间 redisClient.expire("lockKey", 60*60);//一小时 } reutrn hasLock; } //释放锁 releaseLock() { redisClient.del("lockKey"); } //调用入口 doMethod() { if(!getLock()) { //未获取到锁 return "不允许调用"; } //获取到锁,开始处理 try{ //业务逻辑执行 return "处理成功"; } finally { // 只要获取到锁,则在业务逻辑结束之后,必须释放锁 releaseLock(); } return "异常"; }