Redis cli删除多个键

时间:2016-11-18 13:12:31

标签: redis stackexchange.redis phpredis redis-cli

我已经在centos中安装了Redis,我有多个像这样的redis键,

Product:<id>:<url>

如何使用CLI删除所有Product:*:*

Redis版本:3.2.4 [最新推测]

谢谢!

6 个答案:

答案 0 :(得分:9)

使用redis-cli工具,您可以执行以下操作:

redis-cli --scan --pattern 'Product:*:*' | xargs redis-cli DEL

答案 1 :(得分:3)

从redis 2.6.0开始,可以使用LUA脚本。

您应该在 SCAN | 上使用此变体XARGS 变体,因为它更快。

以下脚本也适用于大量密钥。

  1. 打开你的 redis-cli
redis-cli -p somePort -a somePassword
  1. 将 somePattern 替换为您的模式,例如*cars*(记住它不是正则表达式)
EVAL "for _,k in ipairs(redis.call('keys','somePattern')) do redis.call('del',k) end" 0

答案 2 :(得分:2)

没有内置命令。您必须使用SCAN命令获取与模式匹配的所有密钥,然后使用DEL命令删除这些密钥。

// scan from cursor 0 to get the next cursor and keys
SCAN 0 match Product:*:*
// next_cursor, Product:x1:y1, Product:x2:y2, ...
DEL Product:x1:y1 Product:x2:y2 ...
// scan from the next cursor until it return 0
SCAN next_cursor match Product:*:*

另一种解决方案是使用HASH来保存此模式的键:

// set key value
HSET Products Product:<id>:<url> value
// remove a single key
HDEL Products Product:<id>:<url>
// remove all keys
DEL Products

答案 3 :(得分:0)

-n <db>            Database number

外壳:redis-cli -n 1 --scan --pattern prefix:* | xargs redis-cli -n 1 del

答案 4 :(得分:0)

有几种方法可以做到这一点。

  1. https://gist.github.com/ddre54/0a4751676272e0da8186不是 建议在生产服务器上使用,因为它使用的是KEYS关键字
  2. 使用支持Redis> = 2.6.12和(Node.js> = 6)的ioredis(https://github.com/luin/ioredis#streamify-scanning

如果要遵循第二个示例,只需执行以下步骤:

  1. 安装节点js> = 6
  2. 创建文件夹,并通过运行以下命令在其中安装ioredis:

    npm install ioredis

  3. 在该文件夹中创建具有以下内容的redis.js文件

    int[] numbers = {10, 4, 13 , 21, 20, 2, 32, 100 , 23};
    
    Arrays.sort(numbers);
    //now numbers are sorted in ascending order
    
    textViewNumber1.setText(String.valueOf(numbers[8]) //your first element is at index 0
    textViewNumber2.setText(String.valueOf(numbers[7])) 
    .... and so on so forth
    

    }

  4. 通过传递所需的键(在本例中为yourKey *)运行脚本

node -e'require(\“ ./ redis \”)。redisDel(\“ yourKey * \”)'

答案 5 :(得分:0)

把所有你想删除的key放在keylist.txt文件中,然后:

cat keylist.txt | while read rediskey; do echo "Deleting $rediskey" && redis-cli -c -h 'hostname' -p XXXX -a 'XXXXXX' UNLINK $rediskey; done