Удаление нескольких элементов из хэша Redis на основе определенного значения - PullRequest
1 голос
/ 23 ноября 2011

Каков наиболее эффективный способ удаления группы элементов из хеша, основанный на том, содержит ли значение элемента определенную подстроку или нет? Насколько я знаю, на самом деле не существует способа сделать это в одном простом блоке. Я должен буквально получить все значения этого хеша в списке Java, затем перебрать этот список, пока не найду то, что мне нужно, затем удалить его ключ из хеша и повторить ту же процедуру снова и снова.

Другой подход, который я попробовал, состоял в том, чтобы поместить ссылки на идентификаторы для элементов хеша в отдельный список, чтобы позже, с помощью одного вызова, я мог получить список идентификаторов для элементов, которые следует удалить. Это было немного лучше, но, тем не менее, используемая мной реализация Redis (Jedis) не поддерживает удаление нескольких хэш-ключей, поэтому снова я остаюсь со связанными руками.

Redis не поддерживает ссылочную целостность, верно? Это означает, что ключи, хранящиеся в списке Redis, являются ссылками на элементы в хэше, поэтому, если я удалю список, соответствующие элементы из хэша будут удалены. В Redis нет ничего подобного, верно?

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

Ответы [ 2 ]

1 голос
/ 23 ноября 2011
I wish at least there was something like a block,
where I could collect all 1000 commands, and send them in one entire call,
rather than 1000 separate ones.

Для чего предназначены транзакции: http://redis.io/topics/transactions

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

Команды в транзакции (то есть между MULTI / EXEC ) выдаются атомарно, что, как я полагаю, является тем, что вы хотите.

0 голосов
/ 23 ноября 2011

Удаление идентификаторов из списка переадресации не повлияет на поля хэширования Redis.Чтобы ускорить процесс, рассмотрите pipelining .Джедис поддерживает это ...

...