在 Node.js 中读写 Redis 的数据(失效时间和TTL) 【已翻译100%】

来源:互联网 发布:最花钱的游戏知乎 编辑:程序博客网 时间:2024/06/06 11:40

英文原文:Working with Node.js and Redis (Expire and TTL)

在开始本文之前请确保安装好 Redis 和 Node.js 以及 Node.js 的 Redis 扩展 —— node_redis

首先创建一个新文件夹并新建文本文件 app.js 文件内容如下:

var redis = require("redis")    , client = redis.createClient();client.on("error", function (err) {    console.log("Error " + err);});client.on("connect", runSample);function runSample() {    // Set a value    client.set("string key", "Hello World", function (err, reply) {        console.log(reply.toString());    });    // Get a value    client.get("string key", function (err, reply) {        console.log(reply.toString());    });}

当连接到 Redis 后会调用 runSample 函数并设置一个值,紧接着便读出该值,运行的结果如下:

OKHello World

我们也可以使用 EXPIRE 命令来设置对象的失效时间,代码如下:

var redis = require('redis')    , client = redis.createClient();client.on('error', function (err) {    console.log('Error ' + err);});client.on('connect', runSample);function runSample() {    // Set a value with an expiration    client.set('string key', 'Hello World', redis.print);    // Expire in 3 seconds    client.expire('string key', 3);    // This timer is only to demo the TTL    // Runs every second until the timeout    // occurs on the value    var myTimer = setInterval(function() {        client.get('string key', function (err, reply) {            if(reply) {                console.log('I live: ' + reply.toString());            } else {                clearTimeout(myTimer);                console.log('I expired');                client.quit();            }        });    }, 1000);}

注意: 上述使用的定时器只是为了演示 EXPIRE 命令,你必须在 Node.js 项目中谨慎使用定时器。

运行上述程序的输出结果是:

Reply: OKI live: Hello WorldI live: Hello WorldI live: Hello WorldI expired

接下来我们检查一个值在失效之前存留了多长时间:

var redis = require('redis')    , client = redis.createClient();client.on('error', function (err) {    console.log('Error ' + err);});client.on('connect', runSample);function runSample() {    // Set a value    client.set('string key', 'Hello World', redis.print);    // Expire in 3 seconds    client.expire('string key', 3);    // This timer is only to demo the TTL    // Runs every second until the timeout    // occurs on the value    var myTimer = setInterval(function() {        client.get('string key', function (err, reply) {            if(reply) {                console.log('I live: ' + reply.toString());                client.ttl('string key', writeTTL);            } else {                clearTimeout(myTimer);                console.log('I expired');                client.quit();            }        });    }, 1000);}function writeTTL(err, data) {    console.log('I live for this long yet: ' + data);}

运行结果:

Reply: OKI live: Hello WorldI live for this long yet: 2I live: Hello WorldI live for this long yet: 1I live: Hello WorldI live for this long yet: 0I expired
1 0
原创粉丝点击