我已经在 centos 中安装了 Redis,并且我有多个这样的 redis 键,
Product:<id>:<url>
如何Product:*:*
使用 CLI 删除所有内容?
Redis 版本:3.2.4 [我猜是最新的]
谢谢!
我已经在 centos 中安装了 Redis,并且我有多个这样的 redis 键,
Product:<id>:<url>
如何Product:*:*
使用 CLI 删除所有内容?
Redis 版本:3.2.4 [我猜是最新的]
谢谢!
使用该redis-cli
工具,您可以执行以下操作:
redis-cli --scan --pattern 'Product:*:*' | xargs redis-cli DEL
没有内置命令。您必须使用该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:*:*
另一种解决方案是使用 aHASH
来保存此模式的键:
// set key value
HSET Products Product:<id>:<url> value
// remove a single key
HDEL Products Product:<id>:<url>
// remove all keys
DEL Products
-n <db> Database number
壳:redis-cli -n 1 --scan --pattern prefix:* | xargs redis-cli -n 1 del
从 redis 2.6.0 开始,您可以使用 LUA 脚本。
您应该使用此变体而不是SCAN
| XARGS
变体,因为它更快。
以下脚本也适用于大量键。
redis-cli -p somePort -a somePassword
*cars*
(记住它不是正则表达式)EVAL "for _,k in ipairs(redis.call('keys','somePattern')) do redis.call('del',k) end" 0
将要删除的所有键放入 keylist.txt 文件中,然后:
cat keylist.txt | while read rediskey; do echo "Deleting $rediskey" && redis-cli -c -h 'hostname' -p XXXX -a 'XXXXXX' UNLINK $rediskey; done
有几种方法可以做到这一点。
如果您想遵循第二个示例,只需执行以下步骤:
通过运行以下命令创建文件夹并在其中安装 ioredis:
npm 安装 ioredis
在该文件夹中创建具有以下内容的 redis.js 文件
module.exports.redisDel = function(key) {
console.log("del started for key: ", key);
var Redis = require("ioredis");
var redis = new Redis({
port: 6379, // Redis port
host: "192.168.93.27", // Redis host
family: 4, // 4 (IPv4) or 6 (IPv6)
password: "SetCorrectPassword"
});
return new Promise((resolve, reject) => {
var stream = redis.scanStream({
// only returns keys following the pattern of "key"
match: key,
// returns approximately 100 elements per call
count: 100
});
stream.on('data', function (resultKeys) {
if (resultKeys.length) {
console.log(resultKeys)
redis.del(resultKeys); //from version 4 use unlink instead of del
}
else {
console.log("nothing found");
}
});
stream.on('end', function (resultKeys) {
console.log("end");
resolve()
})
})
}
通过传递所需的密钥来运行脚本(在我们的例子中是 yourKey*)
node -e 'require(\"./redis\").redisDel(\"yourKey*\")'