2016-09-15 2 views
0

Есть ли способ создания ключей для создания большого количества (SETS) в "Redis ServiceStack client"? Конечно, не ставя петлю for.Массовое создание ключей в Redis - ServiceStack C#

Существует одна команда в Redis, который делает это: MSET, но я не мог найти выполнение этой команды в ServiceStack.Redis клиента.

Ex:

MSET key1 "val1" key2 "val2" 

UPDATE:
@mythz предложил способ создать несколько наборов, но с одним членом SETALL().
Кроме того, я нашел способ массового добавления членов в единый комплекс по AddRangeToSet(string setId, List items)

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

XXXCOMMAND key1 "val11","val12","val13" key2 "val21","val22" 
+0

Разве это не метод 'SetAll()', как указано здесь https://github.com/ServiceStack/ServiceStack.Redis/wiki/IRedisClient? – kiziu

+0

эта команда внутренне выполняет цикл for https://github.com/ServiceStack/ServiceStack.Redis/blob/16cdeda7b54776d62fc11f0ec29cb615bb3e87b3/src/ServiceStack.Redis/BasicRedisClientManager.cs – JerryGoyal

+0

Я не вижу цикла в потоке выполнения, запущенного в (https: //github.com/ServiceStack/ServiceStack.Redis/blob/16cdeda7b54776d62fc11f0ec29cb615bb3e87b3/src/ServiceStack.Redis/RedisClient.cs#L251). Во-первых, создаются байт-массивы, затем объединяются с командой MSET, а затем отправляются. Я предполагаю, что по циклу вы подразумеваете запуск команды в цикле для каждого ключа. – kiziu

ответ

1

Вы можете использовать SetValues или SetAll API, в которых ServiceStack.Redis batches all keys into a single MSET operation, например:

var map = new Dictionary<string,string> { 
    {"key1","val1"}, 
    {"key2","val2"}, 
    {"key3","val3"}, 
}; 

redis.SetAll(map); 

Большинство операций в ServiceStack.Redis, которые принимают коллекцию отправляются либо в один или когда он не существует, упакован в конвейер и отправлен как одна запись сети.

+0

Это нормально для массового добавления одного члена на каждый набор. Есть ли способ увеличить количество множественных memebers до нескольких наборов? что-то вроде MSADD key1 «val11», «val12», «val13» key2 «val21», «val22», «val23» – JerryGoyal

+0

@JerryGoyal это не добавляет ни одному из SET, он добавляет несколько ключей/значений с помощью команды Redis MSET bulk. MSADD не является действительной командой Redis и [нет команды SET существует] (http://redis.io/commands#set), которая добавляет элементы к нескольким наборам. Вы можете использовать транзакцию или трубопровод для вызова 'AddRangeToSet()' в одном конвейере. – mythz

Смежные вопросы