Redis удаляет пакетные ключи, удаляя косые черты из имен ключей

В моей среде MacOs 10.15 у меня странное поведение Redis, когда я перечисляю некоторые ключи с помощью:

redis-cli -n 1 --scan --pattern "product_doctrine*"

Это дает мне, например:

product_doctrine[AppBundle\Entity\ColumnMapping\$GEDMO_TIMESTAMPABLE_CLASSMETADATA][21546]

Но он не удаляет его с помощью xargs:

redis-cli -n 1 --scan --pattern "product_doctrine*" | xargs -L 1 redis-cli -n 1 del
(integer) 0

Возможно, имя ключа имеет специальные символы? Потому что, если я запущу это внутри Redis-Cli:

SCAN 0 MATCH product_doctrine*

он показывает ключи с экранированной косой чертой:

"product_doctrine[AppBundle\\Entity\\ShopSettings\\$GEDMO_SOFTDELETEABLE_CLASSMETADATA][11677]"

Внутри redis-cli я могу успешно удалить такие ключи с помощью

127.0.0.1:6379[1]> del "product_doctrine[AppBundle\\Entity\\ShopSettings\\$GEDMO_SOFTDELETEABLE_CLASSMETADATA][11677]"
(integer) 1

person numediaweb    schedule 16.10.2019    source источник
comment
На какой ОС вы работаете? В частности, какой xargs? Обратите внимание, что на странице руководства xargs по-разному обрабатывает обратную косую черту. Это, в сочетании с причудами оболочки и redis-cli, приводит к вашему опыту.   -  person Itamar Haber    schedule 16.10.2019
comment
Я запускаю его в среде MacOs 10.15.   -  person numediaweb    schedule 16.10.2019


Ответы (1)


В macOS 10.14 это делается следующим образом:

redis-cli --scan --pattern "foo*" | sed 's/\\/\\\\/' | xargs -L 1 redis-cli DEL

¯\_(ツ)_/¯

person Itamar Haber    schedule 16.10.2019