我正在使用Redis在我的java項目中,我需要獲取某個鍵的值,然後進行一些修改,然後再次設置該鍵的值。 我的要求是,如果一個線程獲得了一個鍵的值,那麼另一個線程應該等到第一個線程爲該鍵設置值。 我本來可以使用同步的,但我們在我們的項目中使用多服務器,所以同步將不適用於這種情況。 任何人都可以建議我一些其他的解決方案,這種情況。java中的Redis鎖定鍵
回答
我認爲Redisson項目是完美的解決方案。
免責聲明:我Redisson項目的成員
Redisson理解需要有一個更抽象的方式與Redis的工作,所以我們創造了許多對自己的Redis的基礎上工作的對象和服務並公開標準的java接口。所有這些對象和服務都是分佈式和線程安全的。
解決您的問題,我們有很多locks and synchronisers供您選擇:鎖(ReentrantLock的),FairLock,MULTILOCK,RedLock(如描述在official document,是的,我們已經閱讀了一切),ReadWriteLock中,信號量,PermitExpirableSemaphore ,CountDownLatch。
的使用不能是更加簡單:
節點1:
Config config = ;//create your own configuration object based on connections types
RedissonClient redisson = Redisson.create(config);
//The Lock is just a java.util.concurrent.locks.Lock
Lock lock = redisson.getLock("myLock");
lock.lock();
//or if you want to have a lease time on the lock
((RLock) lock).lock(10, TimeUnit.SECONDS);
//do other business here.
lock.unlock();
節點2:
//The same as node1
如果你想知道多一點,請前往我們的網站: https://redisson.org
我在我的項目中使用了Redisson,它在一段時間內工作正常,但隨後它開始給我錯誤,如下所示。我不知道是什麼導致了這個錯誤。 [鏈接](https://codeshare.io/2EMNjN) –
其中一個可能的原因是您嘗試創建大量Redisson實例。通常,每個應用程序只需要一個Redisson實例。 –
我可以爲一個** RedissonClient **實例創建多個** RLock **實例。 –
- 1. Redis鎖定KEY
- 2. Java鎖定其他關鍵部分
- 3. Redis的分配增量鎖定
- 4. 按鍵封鎖Java中的地圖
- 5. 在寫入期間Redis是否鎖定?
- 6. 鎖定緩存鍵
- 7. 在java中偏向鎖定
- 8. 在Java中寫鎖定
- 9. Redis中的鍵值對
- 10. 解鎖鎖定的java文件Android studio
- 11. 鎖(objectReference){}沒有鎖定關鍵部分
- 12. Redis的關鍵命名約定?
- 13. Java同步/鎖定
- 14. 鎖定對象java
- 15. Java文件鎖定
- 16. 鎖定Java任務
- 17. 誰鎖定我的東西在C#中使用鎖關鍵字
- 18. 用java指向Redis(緩存)中的單個值的多個鍵
- 19. Java的鎖定條件
- 20. 用JavaScript鎖定tab鍵?
- 21. Python鎖定關鍵部分
- 22. 鎖定在字符串鍵
- 23. Redis按位鍵
- 24. Redis刪除鍵
- 25. Java中C#鎖定的等價物?
- 26. 檢查java中對象的鎖定
- 27. java中的類級別鎖定
- 28. java中的LinkedBlockingQueue和寫入鎖定
- 29. Mac OS中的Java文件鎖定
- 30. 在java中的最短時間鎖定
在你輸入這個問題的時候,你會在Redis自己的[gui de分佈式鎖定](https://redis.io/topics/distlock)。請在這裏發佈問題之前做一些調查。 – rmlan