2017-08-03 4 views
-1

Ich benutze Redis in meinem Java-Projekt, wo ich den Wert eines Schlüssels dann einige Änderungen und dann wieder den Wert des Schlüssels. Meine Anforderung ist, dass wenn ein Thread den Wert eines Schlüssels bekam, ein anderer Thread warten sollte, bis der erste Thread den Wert für diesen Schlüssel festgelegt hat. Ich könnte synchronisiert verwendet haben, aber wir verwenden mehrere Server in unserem Projekt so synchronisiert wird nicht für diese Bedingung arbeiten. Kann mir jemand eine andere Lösung für diesen Zustand vorschlagen.Redis Lock-Taste in Java

+2

In der Zeit, in der Sie diese Frage eingaben, würden Sie Redis 'eigene [gui de auf verteilten Sperren] (https://redis.io/topics/distlock). Bitte recherchieren Sie, bevor Sie hier eine Frage stellen. – rmlan

Antwort

2

Ich denke Redisson Projekt ist die perfekte Lösung für Sie.

Disclaimer: Ich bin Mitglied redisson Projekt

redisson die Notwendigkeit, eine abstraktere Art und Weise zu haben, versteht mit redis zu arbeiten, also haben wir viele Objekte und Dienstleistungen erstellt, die auf der eigenen redis arbeiten und legt Standard-Java-Schnittstellen offen. Alle diese Objekte und Dienste sind verteilt und Thread-sicher.

Ihr Problem zu lösen, haben wir viel locks and synchronisers für Sie zur Auswahl: Sperren (ReentrantLock), FairLock, MultiLock, RedLock (wie beschreiben in der official document, und ja, wir haben es alle lesen), ReadWriteLock, Semaphore, PermitExpirableSemaphore , CountDownLatch.

kann die Nutzung nicht einfacher sein:

Node1:

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(); 

Knoten2:

//The same as node1 

Wenn Sie ein bisschen mehr fahren Sie auf unserer Website erfahren möchten bei https://redisson.org

+0

Ich benutzte Redisson in meinem Projekt und es funktionierte für einige Zeit gut, aber dann fing es an, mir Fehler zu geben, wie unten gezeigt. Ich weiß nicht, was diesen Fehler verursacht. [link] (https://codeshare.io/2EMNjN) –

+0

Einer der möglichen Gründe ist, dass Sie versuchen, viele Redisson-Instanzen zu erstellen. In der Regel benötigen Sie nur eine Redisson-Instanz pro Anwendung. –

+0

Kann ich mehrere ** RLock ** -Instanzen für eine ** RedissonClient ** -Instanz erstellen. –