Dolphin
Dolphin

Reputation: 38641

how to batch delete redis keys in one command

Now I am connect to redis, find some keys like this:

> keys "user:login:user:*"
user:login:user:62668
user:login:user:61970
user:login:user:63586

......

Now I want to delete this keys, I have tried:

keys "user:login:user:*" | xargs del

keys "user:login:user:*" | del

keys "user:login:user:*" | redis-cli xargs del

both could not work, what should I do to delete it batch for one action?

Upvotes: 5

Views: 7659

Answers (2)

spike 王建
spike 王建

Reputation: 1714

Better way

Although @Guy Korland answered the question, but that way may cause long-term blocking. We should always remmber redis use single thread to operate data, so if you have a lot of keys match user:login:user:* or each key's type is list, set, hash, sorted_set with a lot of elements. The deletion process will cost lots of time, redis cannot respond to other command.

redis-cli --scan --pattern users:* | xargs redis-cli unlink

use scan && unlink instead of keys && del can avoid blocking.

For the difference between scan and keys, unlink and del:

scan vs keys
del vs unlink

Upvotes: 3

Guy Korland
Guy Korland

Reputation: 9568

You need to run redis-cli with --raw to get the result clean as arguments fro the redis-cli del

redis-cli del `redis-cli --raw keys "user:login:user:*"`

Upvotes: 1

Related Questions