垃圾回收清理Redis部分 Key(清空redis部分key)
Redis是一款优秀的非关系型内存数据库,用的非常广泛。但是,随着Redis中key的数量增加,内存开销也会相应增加,这就需要我们适当去管理和清理。
1、Redis Node.js Client清洁部分key
首先要安装Redis Client,比如在Node.js应用中,使用npm安装如下:
$>npm install redis
然后获取key列表,然后循环遍历所有key,筛选出过期的key,根据调用redis的批量删除的方法,对过期的key进行删除,如下:
//获取由 Redis 存储的所有键client.keys(‘*’, (err, keys) => {
if (err) throw err;
//删除满足条件的key
let deletes = [];
let multi = client.multi();
keys.forEach((key) => {
//检查 key 是否过期
client.ttl(key, (err, ttl) => {
if (ttl
deletes.push(key);
multi.del(key);
}
});
});
//提交删除动作
multi.exec(function (err, replies) {
if (err) throw err;
console.log(“成功删除keys:” + deletes);
});
});
2、在 Redis 命令行终端清理
如果是在 Linux 终端,可以先进入Redis命令行终端,执行以下命令,来获取过期的key键。
keys * | xargs -I {} sh -c “echo {};echo TTL {} | redis-cli” | awk -F'[ :]’ ‘{ if($2==’1′) print $1 }’
其中,`keys *` 获取所有key列表,`xargs` 以管道输出key给后面的命令,`echo TTL {} | redis-cli` 获取key的ttl属性值,`if($2==’1′)` 判断ttl值为1就过期, `print $1` 输出过期的key,好了,获取所有过期的key列表后,再执行`del`命令,即可清理掉满足ttl条件的key,实现垃圾回收。
$>del $(keys * | xargs -I {} sh -c “echo {};echo TTL {} | redis-cli” | awk -F'[ :]’ ‘{ if($2==’1′) print $1 }’)
通过上面的方法,可以把Redis中的部分key进行清理,以降低内存的消耗,保证Redis的稳定以及节约开销。