Redis过期转移让数据更长久有效(redis过期转移)
Redis作为一种高性能的内存数据库,在许多WEB应用中得到了广泛应用。然而,Redis里的数据是有时效性的,一定时间后,Redis内的数据将无法被访问、实用,即使从逻辑上来说它们仍然是有用的数据。
因此,基于Redis的过期日期的数据转移解决方案几乎成为必不可少的。下面将实现一个过期转移的脚本,以完成未实用的Redis数据迁移到MongoDB存储,实现改变Redis里数据有效期,使其永久有效。
初始化MongoDB和Redis连接:
“`javascript
// mongodb
const mongo = require(‘mongodb’);
const mongodb = new mongo.MongoClient(‘mongodb://localhost:27017’);
// redis
const redis = require(‘redis’);
const client = redis.createClient({
host: ‘127.0.0.1’,
port:6379
});
client.select(1);
之后,创建一个用于操作Redis过期key的函数:
```javascript// 操作过期key的函数
async function expiredKey(){ // 连接mongodb
const dbs = awt mongodb.connect(); // 获取Redis的所有过期key
let keyList = awt client.keys('*expires*'); for(let key of keyList){
// 获取key的内容 let content = awt client.get(key);
// 将key的内容插入MongoDB let insertResult = awt dbs.db('databaseName').colletion('colletionName').insertOne({
key_name: key, content: content
}); if (insertResult.result.ok == 1) {
console.log('内容插入MongoDB成功'); // 删除Redis里对应过期key
let delResult = awt client.del(key); if(delResult) console.log('Redis过期Key已删除');
} }
client.quit(); dbs.close();
}
利用定时器,定时调用上面定义的函数,实现Redis过期转移定时任务。
“`javascript
// 定时任务
const schedule = require(‘node-schedule’);
const rule = new schedule.RecurrenceRule();
rule.hour = 1;
schedule.scheduleJob(rule, async function() {
awt expiredKey();
});
因此,利用上述的脚本让我们可以轻松的将定期更新的内容从Redis转移到MongoDB,由于MongoDB是永久存储的,这样就可以节约带宽空间,避免重新拉取数据,并将有效的数据的有效性改变为永久有效,使数据更长久有效。