可靠性
首先,想要保證分佈式鎖能夠使用,下面這四個條件是必需要知足的:
1. 互斥性。在任意時刻,只有一個客戶端能持有鎖。
2. 不會發生死鎖。即便有一個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保證後續其餘客戶端能加鎖。
3. 具備容錯性。只要大部分的Redis節點正常運行,客戶端就能夠加鎖和解鎖。
4. 解鈴還須繫鈴人。加鎖和解鎖必須是同一個客戶端,客戶端本身不能把別人加的鎖給解了。java
加鎖、解鎖代碼redis
public void sync(String lockKey) { boolean check = false; try { check = redisTemplate.opsForValue().setIfAbsent(lockKey, true); if(check){ log.info("處理業務……"); } } catch (Exception exception) { log.error(ToolsUtil.getStackMessage(exception)); } finally { if(check){ redisTemplate.delete(lockKey); } } }
第一步,設置一個變量check,標記加鎖標識。
第二步,咱們嘗試用lockKey做爲Redis的Key進行上鎖動做,由於Key是惟一的,若是返回true則加鎖成功,若是返回false則表明加鎖失敗。
第三步,判斷變量check是否爲true,若是爲true表明lockKey被上鎖而且是咱們本身上鎖,進行業務操做。
第四步,判斷變量check是否爲true,若是爲true表明lockKey被上鎖而且是咱們本身上鎖,則進行解鎖。分佈式