Delete Redis keys matching a pattern
Asked Answered
P

4

6

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?

Psychotic answered 31/1, 2021 at 19:32 Comment(1)
Does this answer your question? How to atomically delete keys matching a pattern using RedisBaryton
E
11

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.

Effeminize answered 1/2, 2021 at 6:18 Comment(3)
how we can implement this using Redis node js module.Psychotic
Please accept the answer or edit your question. It doesn’t say you have to implement this in nodejsEffeminize
As an addendum to this, I would recommend using unlink instead of del. The key difference is that an unlink command is non-blocking.Ironbark
A
2

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!

Allograph answered 4/5, 2023 at 14:12 Comment(1)
Works great! Should be a built-in command, glarily missing for some reason... they got every other damn thing in that api, tho!Unskillful
A
0

In my case this command worked like a charm:

redis-cli -a myPass keys "*myKeyword*" | xargs -I% redis-cli -a myPass del "%"
Aberrant answered 16/3 at 11:49 Comment(0)
A
-2

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

Albertalberta answered 1/2, 2021 at 10:44 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.