How to delete keys matching a certain pattern in redis
Asked Answered
A

3

20

How to delete keys matching a certain pattern in redis using redis-cli. I would like to delete all foo's from the following list.

KEYS *

foo:1
foo:2
bar:1
foo:3
bar:2
foo:4
Adiell answered 18/2, 2015 at 3:38 Comment(3)
There are multiple answered questions on the same subject, e.g https://mcmap.net/q/53904/-how-to-atomically-delete-keys-matching-a-pattern-using-redisChlorophyll
possible duplicate of How to atomically delete keys matching a pattern using RedisHypergolic
nice solution, even for large sets > 1000 keys. #4006824Neurocoele
C
48

As mentioned in the comment on the question, there are many other answers to this here already. Definitely read the one linked above if you are thinking about doing this in a production sever.

The one I found most useful for occasional command-line cleanup was:

redis-cli KEYS "*" | xargs redis-cli DEL

from "How to atomically delete keys matching a pattern using Redis".

Candent answered 18/2, 2015 at 4:37 Comment(3)
I would use "redis-cli --scan" instead of KEYS. Especially in live environment. Use of KEYS is not recommended.Candancecandela
I am not able to delete from remote host using -h as host.Sectional
Also, just to clarify on what Philip said, It should be redis-cli --scan --pattern "*" if you don't put pattern it'll just select all keys.Supposing
A
5

I wanted to delete thousands of keys by pattern after some searches I found these points:

  • if you have more than one db on redis you should determine the database using -n [number]
  • if you have a few keys use del but if there are thousands or millions of keys it's better to use unlink because unlink is non-blocking while del is blocking, for more information visit this page unlink vs del
  • also keys are like del and is blocking

so I used this code to delete keys by pattern:

 redis-cli -n 2 --scan --pattern '[your pattern]' | xargs redis-cli -n 2 unlink 
Arnettaarnette answered 11/7, 2019 at 4:21 Comment(3)
I am getting (error) CROSSSLOT Keys in request don't hash to the same slot I am using following to delete pattern hi* form cluster redis-cli -u redis://localhost:6379 --scan --pattern 'hi*' | xargs redis-cli -u redis://localhost:6379 DELAirwaves
hi @Airwaves I have no idea that where is the problem, but I searched a bit and found this link check if it works for you or not https://mcmap.net/q/492742/-redis-cross-slot-errorArnettaarnette
@Airwaves I had the same issue with redis cluster. One solution is to basically delete keys one by one, but using redis-cli --pipe to speed things up: https://mcmap.net/q/55328/-how-to-delete-keys-matching-a-pattern-in-redis-clusterKino
C
2

If someone want to do same operation in AWS Elasticache redis, then you can connect with SSH to your EC2 server which is supposed to access AWS Redis server then you can use below command.

redis-cli -h <HOST> -p <PORT> --scan --pattern "patter*n" | xargs redis-cli -h <HOST> -p <PORT> unlink

Replace Host and port with AWS redis server host and port.

Also if your redis setup needs password authentication then use,

redis-cli -h <HOST> -p <PORT> -a <PASSWORD> --scan --pattern "patter*n" | xargs redis-cli -h <HOST> -p <PORT> -a <PASSWORD> unlink

Replace Host, port and password with AWS redis server host, port and password.

You can also use above commands for localhost.

Conaway answered 1/10, 2021 at 7:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.