Delete Redis keys matching a pattern

16k views Asked by At

I am using Redis hash set to store data in the following format:

hset b1.b2.b3 name test

Now I want to delete this key so I am using the following format:

del b1.b2.*

But it not working so how I delete the Redis key using a pattern?

4

There are 4 answers

3
Ankit Sahay On BEST ANSWER

Redis does not provide any method to delete bulk keys. But redis-cli along with xargs can be used to achieve what you are trying to do. See the commands below:

127.0.0.1:6379> hset b1.b2.b3 name test
(integer) 1
127.0.0.1:6379> hgetall b1.b2.b3
1) "name"
2) "test"
$ redis-cli --scan --pattern b1.b2.* | xargs redis-cli del
(integer) 1
$ redis-cli
127.0.0.1:6379> hgetall b1.b2.b3
(empty list or set)

We are scanning redis for a pattern using '--scan' and the output is given to redis-cli again using the xargs method whcih combines all the keys in the scan result and finally we delete all of them using 'del' command.

0
Tuan Anh Tran On

You can do it using the pattern above @Ankit answered.

you can do a SCAN and then delete the keys until nothing left (cursor is 0)

https://redis.io/commands/scan

1
originalhat On

If you'd like to do this via the redis-cli in bulk, you could consider expiring all the keys based on a specified pattern:

EVAL 'for i, name in ipairs(redis.call("KEYS", <pattern>)) do redis.call("EXPIRE", name, 1); end' 0

Effectively it sets the expiration to 1 second so this should do the trick!

0
H.Ç.T On

In my case this command worked like a charm:

redis-cli -a myPass keys "*myKeyword*" | xargs -I% redis-cli -a myPass del "%"