Tag: node redis

Redis客户端(“准备”)事件

我正在使用Node.js的Redis NPM库 – 我可以像这样监听连接“就绪”事件 var client = require('redis).createClient(); client.on('ready', function () { client.keys('*', function (err, keys) { if (err) { log.error(err); } else { for (var i = 0; i < keys.length; i++) { createLocalDataMap(keys[i]); } } }); }); 但是,如何查询Redis是否准备好,而不是在我准备好处理它之前可能会触发的事件? 我想我可以放弃现成的事件,只是做一个查询,然后等待回应,但有没有更好,更安全和更复杂的方式? 换句话说,我很可能必须写一个这样的函数: var isReady = false; client.on('ready', function(){ isReady = true; }); function doSomethingMuchLater(){ if(isReady){ […]

EXPIRE Redis键如果没有修改

如果在最近的x分钟内没有修改该值,是否有直接的方式来EXPIRRE一个redis键? 我怀疑这是可能的 – 但我想知道是否有本地解决scheme或一些非常小的逻辑和/或额外的状态。 现在,这个行为可能已经存在 – 我调用一个关键的EXPIRE。 那么如果我在该密钥上调用SET,我可以再次调用EXPIRE,并且密钥将会以新的值不旧的方式进行EXPIRE?

使用connect-redis的Node / Express,如何处理会话过期

我有一个使用Redis作为会话存储的Node / Express应用程序。 我有一个关于处理届会届满的问题。 我想有一个活动的会话,直到浏览器closures,所以我没有设置会话到期时间。 这样做会话cookie工作正常,但我对Redis有怀疑。 存储在Redis数据库中的夫妇密钥/值似乎永不过期。 如何正确处理这个问题? 有一种方法来configurationredis来销毁一定的空闲时间存储的值? 或者,在应用程序内部调用connect-redis时,最好设置一个TTL? 应用程序内的会话的实际configuration: var session = require('express-session'); var RedisStore = require('connect-redis')(session); app.use(session({ store: new RedisStore({port:6379, host: 'localhost'}), secret: "my-secret-here", resave: false, saveUninitialized: true }));

当使用Promise.all时,Node_Redis HGETparsing为布尔数组

我一直在深入研究redis,并且使用redis进行工作,因为它只是数据存储(我知道这不是redis的预期目的,但是我从学习命令和整体使用Node上的redis获益) m使用Node_Redis。 这是我想完成的(所有在redis中):我尝试使用他们的电子邮件检索用户。 问题在于:我有一个Promise.all调用,它接收所有的电子邮件(键)并映射到HGET命令。 当Promise.all解决我期望它用一个用户对象数组解决,但它最终解决了一个布尔值数组(即[true,true,true])。 这是/users的逻辑 router.get("/", (req, res) => { client.lrange("emails", 0, 1, (err, reply) => { if (err) return console.log(err); if (reply) { Promise.all( reply.map(email => { return client.hgetall(email, (err, reply) => { if (err) return console.log(err); console.log("reply for hgetall", reply); // this prints a user object correct, but Promise.all still resolves to […]

使用promise和rediscallback

我试图用我在Redis服务器上的东西填充我的var todos ,我得到我必须使用承诺,但我可能不在正确的位置。 首先,我用.smembers()函数获取所有ids,并且为每个id获取具有正确id的对象并将其parsing为todos 。 var todos=[]; res.locals.redis.smembers("todo:20", function(err, reply){ // ie SMEMBERS todo:20 returns 0 and 1 var promises=reply.map(function(elem){ res.locals.redis.get("todo:20:"+elem, function(err, reply1){ // ie GET todo:20:0 return new Promise(function(resolve, reject){ todos.push(JSON.parse(reply1)); resolve(); }); }); }); Promise.all(promises) .then(function(){ res.locals.redis.quit(); res.render('todolist.ejs', {todo: todos}); }) .catch(function(reason){ console.log(reason); }); });

从redis获取密钥列表?

我有一个相同的约定更大的哈希集的一部分: redis.hmset("this:that:a", {"one": 'two', "three": 'four'}); redis.hmset("this:that:b", {"five": "six", "seven": "eight"}); var all_parts = {}; redis.keys("this:that:*", function(err, keys) { for (var i=0; i<keys.length; i++){ key = keys[i]; redis.hgetall(key, function(err, obj) { all_parts[key] = obj; if (i >= keys.length) { return console.log(all_parts); } else { return console.log('waiting'); } }); }; }); 导致console.log … { 'this:that:a': { […]

有效的方法redis设置成员更新

我有一个redis集。 这个集最多可以存储20个成员(添加了SADD命令)。 我的问题是 我需要在需要时更新这些成员。 会员需要修改最多10次,每个成员。 设置成员是json作为一个string。 我脑海里只有独立,也没有让所有成员更新,重新创build。 但似乎是iditoic。 我知道有ZADDsorting设置与它的分数支持它似乎也适合我也需要更新像JSON数据的分数,但我只是想知道是否有任何方法更新成员以有效的方式,或更新成员不可接受的Redis方式? 注意:Redis数据存储由node.js和java客户端使用。

Redis队列在Node.js集群环境中

使用Node.js集群支持,我希望主进程生成添加到Redis队列中的数据项。 然后我想运行多个读取Redis队列的工作进程。 当然,只有一个工作进程应该使用从队列中检索的数据项。 为了让我开始,你可以build议在哪里看节点包支持或原始的Redis命令来完成这个? 让我强调,在Node.js集群环境中,消费者是独立的进程,我们可以调整竞争从单个Redis队列中读取的工作进程的数量,以调整整个系统的性能。

Redis + Node.js – 循环设置成员

这是我添加设置users 。 每个user都有一个userID和一个socketID : socket.on('login', function(userID){ console.log('io.sockets.on — socket.on — userID: ' + userID); console.log('socket.id = ' + socket.id); var user = userID; // add first user redis.sadd("users", user); redis.hmset(user, "socketID", socket.id, "userID", userID); }); 这里是我试图检索集合中的所有users ,并循环它们的地方: // Get the list of online users and show Presence redis.smembers("users", function(err,results) { var onlineUsers = results; console.log("onlineUsers […]

redis.lindex()返回true,而不是索引处的值

我有一个现有的键值列表: key value1 value2 。 在redis-cli ,我运行LRANGE key 0 -1 ,它返回: 1) value1 2) value2 这证实存在关键值列表。 在redis-cli ,运行LINDEX key 0返回: "value1" 然而,在我的节点应用程序,当我执行console.log(redis.lindex('key', 0)) ,它打印true而不是索引值。 我究竟做错了什么? 注意:我正在使用node-redis包。