Redis
 sql >> база данни >  >> NoSQL >> Redis

Конвейериране срещу пакетиране в Stackexchange.Redis

Зад кулисите, SE.Redis върши доста работа, за да се опита да избегне фрагментирането на пакети, така че не е изненадващо, че е доста подобно във вашия случай. Основната разлика между пакетирането и плоския тръбопровод са:

  • партида никога няма да бъде преплитана с конкуриращи се операции на един и същ мултиплексор (въпреки че може да бъде преплетена на сървъра; за да избегнете това, трябва да използвате multi /exec транзакция или Lua скрипт)
  • партида винаги ще избягва вероятността от пакети с малък размер, защото знае за всички данни предварително.
  • но в същото време цялата партида трябва да бъде завършена, преди да може да се изпрати нещо, така че това изисква повече буфериране в паметта и може изкуствено да доведе до забавяне.

В повечето случаи ще се справите по-добре, като избягвате пакетирането, тъй като SE.Redis постига повечето от това, което прави автоматично когато просто добавяте работа.

Като последна бележка; ако искате да избегнете локални излишни разходи, един последен подход може да бъде:

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

Това изпраща всичко надолу, нито чака отговори, нито разпределя непълна Task s за представяне на бъдещи стойности. Може да искате да направите нещо като Ping накрая без пожарни и забрави, за да провериш, че сървърът все още говори с теб. Обърнете внимание, че използването на „запали и забрави“ означава, че няма да забележите грешки в сървъра, за които се съобщава.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Статистика на Redis

  2. Ruby Redis клиент сканиране срещу ключове

  3. Redis списък с вложени ключове

  4. Проблем с много вмъкване на Redis

  5. ActionCable на AWS:Грешка по време на ръкостискане на WebSocket:Неочакван код на отговор:404