In redis, how do i remove keys?

坚强是说给别人听的谎言 提交于 2019-11-27 10:39:59

问题


I want to remove keys that match "user*".

how do I do that in redis command line?


回答1:


This is not a feature right now to be able to do in one shot (see the comments in the DEL documentation). Unfortunately, you are only left with using KEYS, looping through the results, and then using DEL to remove each one.

How about using bash a bit to help?

for key in `echo 'KEYS user*' | redis-cli | awk '{print $1}'`
 do echo DEL $key
done | redis-cli

To step through it:

  1. echo 'KEYS user*' | redis-cli | awk '{print $1}' -- get all the keys and strip out the extra text you don't want with awk.
  2. echo DEL $key -- for each one, create an echo statement to remove it.
  3. | redis-cli -- take the DEL statements and pass them back into the cli.

Not suggesting this is the best approach (you might have some issues if some of your usernames have spaces in them, but hopefully you get the point).




回答2:


Another compact one-liner I use to do what you want is:

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



回答3:


Now there is a command to remove a key,i.e., DEL key [keys]

DEL key...




回答4:


Further to orangeoctopus' answer, you don't need the echo and pipe, you can pass commands as arguments into redis-cli. This means you can do

for key in `redis-cli "KEYS" "user*" | awk '{print $1}'`
 do redis-cli "DEL" "$key"
done



回答5:


Using awk, find all matching keys from redis using redis-cli KEYS command and pipe to redis-cli DEL command.

redis-cli KEYS "user*"  | awk '{ system("redis-cli DEL " $1) }'



回答6:


I know this is old, but for those of you coming here form Google:

I just published a command line interface utility to npm and github that allows you to delete keys that match a given pattern (even , or as you asked user) from a Redis database.

You can find the utility here:

https://www.npmjs.com/package/redis-utils-cli




回答7:


When using the oneliner, you can edit the pattern in case it escapes specific characters. For instance, to delete patterns like '\b test \b' use:

redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del



回答8:


Use this to remove redis keys having backslashes, quotes, double quotes or spaces:

redis-cli KEYS "user*" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed "s/'/\\\\'/g" | sed 's/ /\\ /g' | xargs redis-cli DEL



来源:https://stackoverflow.com/questions/8799063/in-redis-how-do-i-remove-keys

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!