2013-09-18 2 views
2

Я рассматриваю использование протокола Redis для массовых вставок, как описано здесь: http://redis.io/topics/mass-insert Прежде, чем я занят, напишите код, чтобы справиться с этим. Я просто хочу быть уверенным, что я четко понимаю, что требуется Redis, чтобы сделать это Работа.Redis Mass Insertion

Вышеупомянутая ссылка предполагает, что для вызова операции SET [SET myKey Value myValue] с использованием массовой вставки мне нужно создать команду, которая может быть выполнена либо в нескольких строках в файле, либо в одной кавычной строке.

Предполагая, что я не хочу использовать команду SET, вместо этого я хочу использовать команду SADD для добавления в набор. Является ли то, что у меня здесь, для форматированного формата строки?

"* 4 \ г \ п $ 4 \ г \ nSADD \ г \ п $ 2 \ г \ n80 \ г \ п $ 5 \ г \ n1,2,34 \ г \ п"

По сути то, что я храню является ключевым: 80, значение которого 1,2,34

в конце концов, что я хочу, способность сделать это:

Key  Value 
80  1,2,34 
90  4,8,34 

Получить пересечение (агломерационных) и/или объединение (SUNION) двух множеств. то есть SINTER = 34 или SUNION = 1,2,4,8,34

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

ответ

1

Я бы сказал, что вы находитесь на пути преждевременной оптимизации (которая обычно не самая лучшая).

Любой язык сценариев с клиентом Redis, поддерживающий конвейерную обработку, должен иметь возможность нажимать на сервер Redis не менее 50 тыс. Команд. Код будет прост, без необходимости вручную кодировать протокол Redis. Конечно, массивный трюк вставки быстрее, но вам это действительно нужно?

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

  • число аргументов неверно (ваш пример должен начать с * 3)

  • длина последнего аргумента является неправильным (1,2, 34 длина - 6 байт, а не 5).

  • в команде SADD вам нужен один аргумент для элемента набора (т. Е. Для Redis 1,2,34 будет один элемент, а не три).

Правильная команда предпочел бы быть что-то вроде этого:

"*5\r\n$4\r\nSADD\r\n$2\r\n80\r\n$1\r\n1\r\n$1\r\n2\r\n$2\r\n34\r\n" 

Протокол Redis описано здесь: http://redis.io/topics/protocol

+0

Отлично объяснение. Это на самом деле добавляет ясности и недостающей информации, которую документация не предоставляет. Кроме того, как и FYI, мне нужно будет вставить сотни миллионов из них, и данные не будут обновляться очень часто, поэтому я заинтересован в этом маршруте и не использую клиента для его конвейера. – ChrisS