jedis結合setnx方法實現分布式鎖
public boolean lock(string key, int exprie)object obj = this.get(lockkey);
if (obj==null) else
}value = (string)obj;
if (model.islose()) else
}logger.warn("get redis lock fail, key =" + lockkey);
return false;
} catch (exception ex)
}public void unlock(string key) catch (exception ex)
logger.info("redis unlock success ,key = " + lockkey);
}private lockmodel createmeta(int exprie)
public string getlockkeyprev()
/*** 設定key
* 需要傳入key是否不存存在
** @param key 鍵
* @param value 值
* @param expx ex/px 值只能取ex或者px,代表資料過期時間的單位,ex代表秒,px代表毫秒
* @param interval 過期時間,單位是expx所代表的單位。
* @return set 在設定操作成功完成時,才返回 ok 。
* 如果設定了 nx 或者 xx ,但因為條件沒達到而造成設定操作未執行,那麼命令返回空批量回覆(null bulk reply)
*/public string setnx(string key, object value, string expx, long interval) catch (exception e) finally
return result;
}/**
* 刪除給定的乙個或多個 key 。
* 不存在的 key 會被忽略。
** @param key 鍵
* @return 被刪除 key 的數量。
*/public long delete(string key) catch (exception e) finally
return result;
}/**
* 為給定 key 設定生存時間,當 key 過期時(生存時間為 0 ),它會被自動刪除。
* 可以對乙個已經帶有生存時間的 key 執行 expire 命令,新指定的生存時間會取代舊的生存時間。
** @param key
* @param interval
* @return 設定成功返回 1 。
* 當 key 不存在或者不能為 key 設定生存時間時(比如在低於 2.1.3 版本的 redis 中你嘗試更新 key 的生存時間),返回 0 。
*/public long expire(string key, int interval) catch (exception e) finally
return result;
}/**
* 返回 key 所關聯的字串值
* 如果 key 不存在那麼返回特殊值 nil 。
** @param key
* @return 當 key 不存在時,返回 nil ,否則,返回 key 的值。
* 如果 key 不是字串型別,那麼返回乙個錯誤。
*/public object get(string key) catch (exception e) finally
return o;
}
分布式鎖 使用Redis實現分布式鎖
關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...
redis實現分布式鎖
隨便 系統越來越大,各功能模組除了垂直切割以外,同時也得做集群處理,那麼問題來了,在多執行緒情況下對於資源的競爭就需要乙個統一的訪問限制。以選課系統為例子,集群中各節點對課程可選數量同時操作,這裡就需要同步了,否則會導致最後選到的數量比可選的數量大,這裡我們的分布式鎖就派上用場了。利用redis來實...
redis實現分布式鎖
分布式鎖可以基於很多種方式實現,比如zookeeper redis.不管哪種方式,他的 基本原理是不變的 用乙個狀態值表示鎖,對鎖的占用和釋放通過狀態值來標識。1 使用redis的setnx命令實現分布式鎖 1 實現的原理 redis為單程序單執行緒模式,採用佇列模式將併發訪問變成序列訪問,且多客戶...