sql >> Databasteknik >  >> NoSQL >> Redis

Pipelining vs Batching i Stackexchange.Redis

Bakom kulisserna gör SE.Redis en hel del arbete för att försöka undvika paketfragmentering, så det är inte förvånande att det är ganska likt i ditt fall. Huvudskillnaden mellan batching och platt pipelining är:

  • en batch kommer aldrig att interfolieras med konkurrerande operationer på samma multiplexer (även om den kan interfolieras på servern; för att undvika det behöver du använda en multi /exec transaktion eller ett Lua-skript)
  • en batch kommer alltid att undvika risken för underdimensionerade paket, eftersom den känner till all data i förväg
  • men samtidigt måste hela batchen slutföras innan någonting kan skickas, så detta kräver mer buffring i minnet och kan på konstgjord väg introducera latens

I de flesta fall kommer du att bli bättre genom att undvika batchning, eftersom SE.Redis uppnår det mesta automatiskt när du bara lägger till arbete.

Som en sista anmärkning; om du vill undvika lokala omkostnader, kan ett sista tillvägagångssätt vara:

redisDB.SetAdd(string.Format(keyFormat, row.Field<int>("Id")),
    row.Field<int>("Value"), flags: CommandFlags.FireAndForget);

Detta skickar allt i tråden, varken väntar på svar eller allokerar ofullständig Task s för att representera framtida värden. Du kanske vill göra något som en Ping i slutet utan eld-och-glöm, för att kontrollera att servern fortfarande pratar med dig. Observera att användning av eld-och-glöm betyder att du inte kommer att märka några serverfel som rapporteras.




  1. Plats i mongoose, mongoDB

  2. Redis serialisering och deserialisering

  3. Socket.io, Redis Store och IE

  4. Hur installerar man RDBTools med AWS CloudFormation-mall?