Я установил Redis в Centos, и у меня есть несколько таких ключей Redis,
Product:<id>:<url>
Как я могу удалить все Product:*:*
с помощью CLI?
Версия Redis: 3.2.4 [Последняя, я думаю]
Спасибо!
Я установил Redis в Centos, и у меня есть несколько таких ключей Redis,
Product:<id>:<url>
Как я могу удалить все Product:*:*
с помощью CLI?
Версия Redis: 3.2.4 [Последняя, я думаю]
Спасибо!
Используя инструмент redis-cli
, вы можете сделать следующее:
redis-cli --scan --pattern 'Product:*:*' | xargs redis-cli DEL
redis-cli keys '*' | grep Product | xargs -i redis-cli del {}
- person kakoma; 15.10.2018
-u
и базу данных с параметром -n
, например redis-cli -u redis://redisserver:6379 -n 1 --scan --pattern 'Product:*:*''
.
- person OzzyCzech; 11.05.2020
(error) CROSSSLOT Keys in request don't hash to the same slot
Я использую следующее для удаления шаблона hi*
кластера формы redis-cli -u redis://localhost:6379 --scan --pattern 'hi*' | xargs redis-cli -u redis://localhost:6379 DEL
- person roottraveller; 27.05.2020
Для этого нет встроенной команды. Вы должны использовать команду 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
SCAN
см. в документации.
- person for_stack; 18.11.2016
-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*\")'