Как использовать Redis Pipiline (StackExchange.Redis) в c#? - PullRequest
2 голосов
/ 09 апреля 2020

В настоящее время я тестировал redis-benchmark на моей системе linux и был впечатлен результатами. Но при тестировании я использовал конвейеризацию 16 команд. Сейчас я пытаюсь выполнить его на c#. Моя главная проблема в том, что я хочу записать несколько тысяч случайных данных в Redis и не могу понять, как использовать конвейеризацию с этим.

Заранее спасибо.

1 Ответ

2 голосов
/ 09 апреля 2020

Наиболее явный способ использования конвейерной обработки в StackExchange.Redis - это использование CreateBatch API:

var db = conn.GetDatabase();
var batch = db.CreateBatch();
// not shown: queue some async operations **without** awaiting them (yet)
batch.Execute(); // this sends the queued commands
// now await the things you queued

, однако учтите, что вы можете достичь без , что, поскольку:

  • одновременная загрузка из разных потоков (будь то syn c или asyn c) мультиплексируется , что позволяет эффективно использовать одно соединение
  • тот же трюк «выдачи нескольких асинхронных c операций, но пока их не ждите» по-прежнему работает нормально даже без пакетного API (использование пакетного API гарантирует, что пакет отправляется как непрерывный блок без работы параллельных потоков, чередующихся внутри пакета, это похоже, но менее строго, чем CreateTransaction() API)

Обратите внимание, что в некоторых массовых сценариях ios вы также можете захотеть рассмотреть Lua (ScriptEvaluate()); этот API varadi c, поэтому он может адаптироваться к произвольной длине аргумента - вашему Lua просто нужно проверить размеры KEYS и ARGV (, описанные в документации EVAL ).

...