sql >> Databáze >  >> NoSQL >> Redis

Python &Redis:Osvědčené postupy aplikací pro manažery/pracovníky

Váš problém je, že se pokoušíte spouštět více příkazů současně s jedním připojením redis.

Čekáte něco jako

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

ale dostáváte

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

Výsledky se vrátí ve stejném pořadí, ale neexistuje nic, co by spojovalo vlákno nebo příkaz s konkrétním výsledkem. Jednotlivá připojení redis nejsou bezpečná pro vlákna – budete potřebovat jedno pro každé pracovní vlákno.

Podobné problémy můžete zaznamenat také při nevhodném použití zřetězení – je navrženo pro scénáře pouze pro zápis, jako je přidávání spousty položek do seznamu, kde můžete zlepšit výkon tím, že předpokládáte, že LPUSH uspěl, místo abyste čekali, až vám server řekne, že bylo úspěšné po každém položka. Redis stále vrátí výsledky, ale nemusí to být nutně výsledky z posledního odeslaného příkazu.

Kromě toho je základní přístup rozumný. Existuje však několik vylepšení, která byste mohli provést:

  • Místo kontroly délky použijte neblokující protokol LPOP – pokud vrátí hodnotu null, seznam je prázdný
  • Přidejte časovač, aby pokud je seznam prázdný, počkal a nevydával další příkaz.
  • Zahrnout kontrolu zrušení do podmínky cyklu while
  • Ošetřovat chyby připojení – používám vnější smyčku nastavenou tak, že pokud se připojení nezdaří, pracovník se pokusí znovu připojit (v podstatě restartovat hlavní ) na přiměřený počet pokusů před úplným ukončením pracovního procesu.



  1. Jak uložit pouze jednu databázi v Redis?

  2. Jak importovat data z mongodb do pand?

  3. Jak provést agregační dotaz Mongo v Spring Data?

  4. Jak izolovat jarní spouštěcí aplikaci redis a jarní spouštěcí relaci globální redis