Обновление конкретного ключа / значений в хэш-таблице - Redis C # .NET Core 2.2 - PullRequest
0 голосов
/ 24 октября 2019

Я новичок в Redis, и я пытаюсь сделать обычное, то есть преобразовать одну таблицу SQL в Redis. Более конкретно, после некоторого чтения я наткнулся на hset, который я перевел на C # .Net Core с StackExchange.Redis.

. Я также наткнулся на Sorted Sets, которые после прочтения заявили, что они будут необходимы дляпоиск конкретных вещей, но после нахождения некоторого примера кода Здесь это, похоже, не то, что я ищу (если я не прав)

В принципе, у меня есть API, которыйпринимает 4 параметра: device нет, input нет, state (0 или 1) и datetime. Как только device и input будут найдены, state будет обновлен в соответствии с параметром. Например, device 1, input 12, state 1, datetime "xxx".

Мой код пока таков;однако, это относится только к одной записи строки / хеша, в общей сложности будет 12 inputs для каждого device и 16 devices, таким образом, будет всего 192 строки / записи хеша.

            string state = "state:1";

            HashEntry[] states =
            {
                new HashEntry("id", 1),
                new HashEntry("device", 1),
                new HashEntry("input", 1),
                new HashEntry("state", 0),
                new HashEntry("when", "2019-10-23 14:22:48.5174055 +01:00")

            };

            db.HashSet(state, states);

            var allStates = db.HashGetAll(state);

            foreach(var item in allStates)
            {
                Console.WriteLine($"{item.Name}, {item.Value}");
            }

Такой код будет в той или иной форме цикла, чтобы выполнить 192 строки / хэш-записи, но я подумал, что кодирую это только для начала. Поэтому я подумал, что буду искать какое-то руководство, поскольку способ, которым я подхожу к этому, может быть неправильным, или я упускаю что-то вроде сортированного набора.

1 Ответ

1 голос
/ 25 октября 2019

Хэши - хорошее место для начала, но я бы посоветовал использовать разные ключи для сегментирования ваших данных вместо того, чтобы перебирать все записи. Установите новый ключ для каждого ввода устройства (всего 192 ключа):

device1:input1 
device1:input2
device1:input3
...

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

db.HashSet("device6:input2", "when", DateTime.Now.ToString());

или обновить несколько полей:

db.HashSet("device6:input2", new HashEntry[] 
{ 
    new HashEntry("state", 1), 
    new HashEntry("when", DateTime.Now.ToString())
});

Есливы просто хотели получить данные с устройства, это также довольно просто:

db.HashGet("device6:input2", "your-field-name"); // gets a single field's value
db.HashGetAll("device6:input2"); // gets the values from all fields

Это даст вам простейшую реализацию и избавит вас от необходимости перебирать множество записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...