sql >> Database teknologi >  >> NoSQL >> Redis

Pipelining vs Batching i Stackexchange.Redis

Bag kulisserne gør SE.Redis en del arbejde for at forsøge at undgå pakkefragmentering, så det er ikke overraskende, at det er ret ens i dit tilfælde. Den største forskel mellem batching og flad pipelining er:

  • en batch vil aldrig blive interleaves med konkurrerende operationer på den samme multiplexer (selvom den kan være interleaves på serveren; for at undgå det skal du bruge en multi /exec transaktion eller et Lua-script)
  • en batch vil altid undgå chancen for understørrelsespakker, fordi den kender til alle data på forhånd
  • men samtidig skal hele batchen færdiggøres, før noget kan sendes, så dette kræver mere buffering i hukommelsen og kan kunstigt indføre latens

I de fleste tilfælde vil du gøre det bedre ved at undgå batching, da SE.Redis opnår det meste af det, den gør automatisk når du blot tilføjer arbejde.

Som en sidste bemærkning; hvis du vil undgå lokale overhead, kan en sidste fremgangsmåde være:

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

Dette sender alt ned ad tråden, hverken venter på svar eller tildeler ufuldstændig Task s at repræsentere fremtidige værdier. Du vil måske gøre noget som et Ping til sidst uden brand-og-glem, for at kontrollere, at serveren stadig taler til dig. Bemærk, at brug af brand-og-glem betyder, at du ikke vil bemærke nogen serverfejl, der bliver rapporteret.




  1. spring-data-redis redisTemplate Undtagelse

  2. Hvilke parametre overføres til Mongoose-tilbagekald

  3. Sådan opdateres og ophæves flere dokumenter i MongoDB ved hjælp af C#-drivere

  4. Brug af multiprocessing pool fra selleri opgave rejser undtagelse