Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Python i Redis:najlepsze praktyki aplikacji menedżera/pracownika

Twój problem polega na tym, że próbujesz uruchomić wiele poleceń jednocześnie z jednym połączeniem redis.

Oczekujesz czegoś takiego jak

Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
command      
             LLEN test
             0

ale dostajesz

Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
             LLEN test
             command
0

Wyniki są zwracane w tej samej kolejności, ale nic nie łączy wątku lub polecenia z konkretnym wynikiem. Poszczególne połączenia redis nie są bezpieczne dla wątków — będziesz potrzebować jednego dla każdego wątku roboczego.

Możesz również zobaczyć podobne problemy, jeśli używasz nieodpowiedniego potokowania — jest ono przeznaczone do scenariuszy tylko do zapisu, takich jak dodawanie wielu elementów do listy, gdzie możesz poprawić wydajność, zakładając, że LPUSH się powiódł, zamiast czekać, aż serwer powie Ci, że się udało po każdym przedmiot. Redis nadal zwróci wyniki, ale niekoniecznie będą to wyniki ostatniego wysłanego polecenia.

Poza tym podstawowe podejście jest rozsądne. Istnieje jednak kilka ulepszeń, które możesz wprowadzić:

  • Zamiast sprawdzać długość, po prostu użyj nieblokującego LPOP - jeśli zwróci wartość null, lista jest pusta
  • Dodaj zegar, aby jeśli lista jest pusta, będzie czekać, a nie tylko wydawać kolejne polecenie.
  • Dołącz sprawdzanie anulowania w warunku pętli while
  • Obsługuj błędy połączenia — używam zewnętrznej pętli skonfigurowanej tak, że jeśli połączenie się nie powiedzie, pracownik spróbuje połączyć się ponownie (zasadniczo zrestartuj główny ) na rozsądną liczbę prób przed całkowitym zakończeniem procesu roboczego.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Microsoft.Extensions.Caching.Redis wybierz inną bazę danych niż db0

  2. Dlaczego SQLite jest szybszy niż Redis w tym prostym teście?

  3. Jak korzystać z posortowanych list Redis

  4. Nie można połączyć się z Redis o 127.0.0.1:6379:Połączenie odrzucone

  5. Jaka jest dobra strategia grupowania podobnych słów?