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是永久存储的,这样就可以节约带宽空间,避免重新拉取数据,并将有效的数据的有效性改变为永久有效,使数据更长久有效。
香港服务器首选,2H2G首月10元开通。()提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。