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

Jak udělat základní WATCH s StackExchange.Redis

Důvod WATCH není vystaven přímo, je to kvůli tomu, jak je SE.Redis navržen pro multiplexování příkazů z různých zásobníků volání na jediném spojení. To znamená, že je nutné, aby každá transakce byla velmi přísně řízeno.

Není mi úplně jasné, jaký by byl účel „beze změny“ sám o sobě , bez srovnání s nějakou známou hodnotou - jinak jen vytváříte rasovou podmínku. Určitě by bylo možné přidat podporu, ale opravdu bych nejprve rád pochopil očekávaný případ použití. Můžete to vysvětlit?

Re vaše úprava; váš preferovaný příklad (ten poslední) prostě není možný s redis - nic společného s SE.Redis; pokud provedete GET uvnitř MULTI , dostanete odpověď až po EXEC dokončí - takže nemůžete použít hodnotu v SET :zatím není k dispozici .

Pokud by to nebylo pro multiplexování, mohli byste si svůj druhý příklad trochu přeuspořádat (na základě toho, co dělá SE.Redis):

WATCH key
val = GET key
MULTI
val = val + 1
SET key $val
EXEC

toto je typické použití WATCH :sledujete věci, na které se ptáte předem, pak víte, že {key} je během této smyčky nezměněna (nebo alespoň bude transakce přerušena; žádný nekonzistentní stav). Nicméně WATCH nehraje dobře s multiplexerem , což je důvod, proč vás SE.Redis nutí jít cestou načítání hodnoty před transakcí , což vám umožní porovnat hodnotu, abyste potvrdili, že se nezměnila. Stejný výsledek; mírně odlišný přístup, ale je bezpečný pro multiplexery. Více na toto téma naleznete zde.




  1. pochopit systém mezipaměti MongoDB

  2. jak strukturovat složený index v mongodb

  3. Nejrychlejší MongoDB na Azure!

  4. Top 6 funkcí HDFS – Výukový program Hadoop HDFS