Redis with NodeJS - 创建一组十个项目

时间:2017-02-23 12:49:43

标签: node.js http angular redis

我目前正在Angular2,NodeJS和Redis中构建一个小应用程序,其中用户信息将存储在Redis实例中。我对Redis比较陌生,并且无法想象我需要创建的功能。

用户通过输入表单中的Angular2前端输入单词。然后将该单词转换为不同的字符串,然后将这些值以存储中的对象的形式存储(Redis)。只需要存储最后10个项目,因此存储DB的长度必须为10,最新项目将附加到集合中,如果长度已经为10,则修剪最后一个项目。

我在Redis中实现这一点很困难,我在NodeJS层中的Redis命令似乎没有做我想让他们做的事情。

以下是处理用户输入的NodeJS控制器:

var Config = require(global.appRoot + '/Config.js');
var redisClient = require('../lib/redisConnection');

function Storage() {
    this.__objectName = 'Storage';
}

Storage.prototype.storeTerm = function(req, res, next) {
    var word = req.body.word;
    var newWord = req.body.newWord;
    var hashToStore = {
        word:  newWord
    };
    redisClient.hmset(['words', word], function(err, reply) {
        if(err) {
            res.json('Error:' + err);
        } else {
            res.json(reply);
        }
    });
};

module.exports = Storage;

正如您所看到的,用户输入从Angular2 http callm发送到此函数,然后解析值,放入对象hashToStore然后我试图将其保存在名为' words' 。这似乎不起作用,并且不确定如何实现10限制功能。

有人可以告诉我这是正确的还是我错了?

由于

1 个答案:

答案 0 :(得分:0)

我认为您应该使用rpush命令而不是hmsetrpush会在插入后返回列表长度,因此您可以使用lpop

轻松应用10个项目限制
redisClient.rpush('your_list_name', newWord, function(err, reply) {
    if(err) {
        res.json('Error:' + err);
    } else {
        if(reply > 10) {
            redisClient.lpop('your_list_name');
        }
        res.json({status: "ok"}); // send some kinde of status
    }
});