- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在处理的当前项目中有一个 DAO(数据访问对象),它是 redis 数据库的抽象。以下是与我即将提出的问题相关的所有代码:
var redis = require("redis");
var _ = require("underscore");
var exceptions = require("./exceptions");
function Dao (port, address) {
var self = this;
console.log("Connecting to redis @ %s:%s", address, port);
var client = redis.createClient(port, address);
function incrCount (callback) {
client.incr("count", callback);
};
this.getPages = function (callback) {
client.hgetall("pages", function (err, pages) {
if (err) {
callback(err);
} else if (!pages) {
callback(exceptions.NoPages);
} else {
callback(err, _.reduce(Object.keys(pages), function (array, id) {
array.push(JSON.parse(pages[id]));
return array;
}, []));
}
});
};
this.createPage = function (page, callback) {
incrCount(function (err, results) {
if (err) {
callback(err);
} else {
page.id = results;
self.updatePage(page);
callback(err, {id: results});
}
});
};
this.updatePage = function (page) {
client.hset("pages", page.id, JSON.stringify(page));
};
};
每当我使用这个对象时,例如:
function printResults (err, results) {
console.log(err || results);
};
var dao = new Dao(port, address);
dao.createPage({testpage: "testcontent"}); // DOES NOT ADD PAGE TO DB, I HAVE NOT IDEA WHY, HOWEVER COUNT IS INCREMENTED TO 1 AS IT SHOULD BE
dao.getPages(printResults); // PRINTS ERROR: NO PAGES EXIST IN DB
dao.updatePage({id: 1, testpage: "testcontent"}); // ADDS PAGE TO DB, AND THIS IS EXACTLY HOW THE FUNCTION WOULD HAVE BEEN CALLED INTERNALLY BY CREATEPAGE() ABOVE
dao.getPages(printResults); // RETURNS TEST PAGE
没有意义的是 createPage()
在幕后调用了 updatePage()
!为什么当我直接调用 updatePage()
时只在数据库中创建页面? createPage()
实际上并没有向 redis 添加任何页面,即使它也只是调用 updatePage()
。
编辑(已解决):显然,我正在运行的测试在它有机会完全接收/处理 createPage 调用之前关闭了数据库连接,我添加了一个 setTimeout(db. close(), 2000)
到我的测试结束,它现在可以工作了。
最佳答案
您不是在等待 hset 的回调,我会更改它以便它使用回调。
this.createPage = function (page, callback) {
incrCount(function (err, results) {
if (err) {
callback(err);
} else {
page.id = results;
self.updatePage(page, function(err) {
callback(err, {id: results});
});
}
});
};
this.updatePage = function (page, callback) {
client.hset("pages", page.id, JSON.stringify(page), callback);
};
然后更改您的代码,看看是否有任何不同
var dao = new Dao(port, address);
dao.createPage({testpage: "testcontent"}, function(err, page) {
if (err) {
return console.log(err)
}
dao.getPages(printResults);
});
以下代码的问题是 getPages 可能在 incr 和 hset 完成之前被调用,因此它不返回任何页面。
dao.createPage({testpage: "testcontent"});
dao.getPages(printResults);
关于javascript - Node redis 客户端 HSET 命令失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26198812/
我正在使用 Redis 2.8 key 空间 Pub/Sub 通知,我想知道是否有可能在 HSET 命令后通知哪个字段发生变化? 目前,由于HSET 命令,但我最好知道哪个字段已设置 - 我知道我可以
给定代码的输出是什么?Jedis 可以在数据库中保存两个不同类型但名称相同的数据集吗?如果不是,在打印线上,j.get 会返回什么? j.set 是否转换为 j.hset? 我是 Redis 数据库的
我在redis中有几个用户的数据,例如 hset - user111;字段 - dayssincelogin ..... 我想为所有用户定期更新 dayssincelogin,一种方法是 KEYS u
我有一个 json 对象,例如一个包含大约 10 个键/值对的用户对象,我目前将其存储在集合中以用于各种分组。 我将对象字符串化,然后在输出时对其进行解析。更新有时很痛苦,因为我必须获取数据然后重置它
这个问题在这里已经有了答案: How can I borrow from a HashMap to read and write at the same time? (2 个回答) 2年前关闭。 我想
http://search.cpan.org/dist/Redis/lib/Redis.pm#hset $r->hset('hashname', $key => $value); ## returns
我正在使用 spring,它是缓存抽象。使用@Cacheable 注解非常方便。但据我所知,这种抽象在 redis 上使用 get/set/del 操作。有什么方法可以使用hset/hget/hdel
我需要使 redis 散列中超过 1 个月的所有键过期。 最佳答案 This is not possible , 为了 keeping Redis simple . Quoth Antirez,Red
如果我有两个排序集,具有不同分数的不同成员集: ZADD set1 10 "player1" ZADD set1 15 "player2" ZADD set1 5 "player3" ZADD set
Redis 不支持仅当键存在时才支持 HSET。 http://redis.io/commands#hash在客户端中实现该功能的最佳方式是什么? 最佳答案 使用事务在客户端很容易实现。 WATCH
我需要使 redis 散列中超过 1 个月的所有键过期。 最佳答案 This is not possible , 为了 keeping Redis simple . Quoth Antirez,Red
我正在阅读 this article其中提到在 redis 中存储 100 万个 key 将使用 17GB 的内存。然而,当切换到散列时,将它们分 block 为 1k(例如:HSET "mediab
我在 redis-py 上设置了一个管道来保存 2 个不同的哈希值 p = self.app.redis.pipeline() key_id = '{}{}'.format(self.prefix,a
我会用点对我的数据进行排序 redis 127.0.0.1:6379[4]> hset player1 point 2 (integer) 1 redis 127.0.0.1:6379[4]> hse
我正在处理的当前项目中有一个 DAO(数据访问对象),它是 redis 数据库的抽象。以下是与我即将提出的问题相关的所有代码: var redis = require("redis"); var _
我正在使用 Redis 在 NodeJS 和 MongoDB 中实现一个缓存层。我是 Redis 的新手。所以我在尝试在给定时间后自动清除缓存时遇到了麻烦。我得到的错误 ReplyError: ERR
我正在使用 rredis 将散列存储到键值,如下所示: library(rredis) redishost HGET simulatorinput asdf "X\n\x00\x00\x00\x02\
我在 Redis 缓存方面走投无路。我想在启动 key 时设置 TTL。 key 将由 hSet($hash, $key, $data) 设置 expire($key, '3600') 好像不行。有没
我正在使用 Redis 使用 HSET 存储一些数值。这是我正在使用的示例命令 HSET "abc" "field" 123 我希望它存储一个整数,但是当我执行 HGETALL 时,结果是一个字符串:
一个HSET是这样的: HSET myhash field1 "Hello" 有没有办法在“field1”键上设置过期时间/TTL。在 myhash tmk 上设置过期时间很简单,但我不知道如何将 T
我是一名优秀的程序员,十分优秀!