Nano Hash - криптовалюты, майнинг, программирование

.NET StackExchangeRedis и порядок выполнения с пакетной службой не гарантируются?

Я просматриваю следующий код, который пытается:

  • добавить ключ/значение в базу данных Redis.
  • установите срок действия этого нового ключа Redis.

i.e.

{
    var batch = database.CreateBatch();

    var tasks = new Task[]
    {
        batch.SetAddAsync(key, value, flags),
        batch.KeyExpireAsync(key, expiry, flags)
    };

    batch.Execute();

    await Task.WhenAll(tasks)
}

сделать все это в одном Redis Batch.

У меня сложилось впечатление, что вы не можете установить порядок, когда дело доходит до пакетной обработки, не говоря уже о нескольких задачах в async/await.

Таким образом, может иметь место следующий порядок:

  • KeyExpiresAsync ‹-- ключ еще не существует.
  • SetAddAsync ‹-- ключ не существует. ключ создан. Затем члены добавляются к ключу.

Я надеюсь и не хочу, чтобы заказ был гарантированным, то есть .. он пытается сделать параллель с этим как можно быстрее.

Итак, мое понимание правильное или неуместное?



Ответы:


1

Порядок гарантирован и операции не будут происходить параллельно.

Перефразируя одного из авторов (@Mark-Gravell):

Что делает пакет, так это откладывает набор операций и гарантирует, что они будут отправлены рядом друг с другом непрерывно в одно соединение, поэтому никакие другие потоки на этом мультиплексоре не получат команды в середине.

Обновлять

@mjwills уже упоминал SO ответ. Также предполагается, что данный модульный тест. Также вы можете проверить это на код RedisBridge.cs. Даже в кластере, поскольку вы вводите обе команды для одного и того же ключа, обе перейдут к одному и тому же узлу, и они будут внутренне отправлены в/извлечены из Очередь.

06.08.2017
  • Ссылку на исходную цитату/документы, пожалуйста? (не троллинг, просто искренне любопытно и т.д.). 06.08.2017
  • Только что обновил ответ. К сожалению, хорошей документации по SE.Redis нет. 06.08.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..