我使用redis在博客上工作,我陷入了api级别。 我试图做以下事情:
MULTI
INCR id
SET post:{id} json_value //Stucked here
SADD posts {id}
EXEC
那么如何获取SET帖子的ID:{id}?
我现在有以下代码,但尚无法使用。
// Create post
function cpost(json) {
client.pipeline()
.incr('id'))
.set('post:' + client.get('id:post', function (err, results) {
return results;
}), json)
.sadd('posts, client.get('id:post', function (err, results) {
return results;
})) // posts post
.exec(function (err, results) {
});
}
使用ioredis
有关如何获取ID值的任何想法?
答案 0 :(得分:3)
如果您想进行交易,则应使用multi()
代替pipeline()
(我认为情况属实)。
以下是我处理此问题的方法。
我只能使用promises分两步完成。您也可以使用回调来实现相同的功能。无论哪种方式,增量都不在交易或批次中。
function cpost(json) {
client.incr('id', 'post').then(function (postId) {
client.multi()
.set('blog:post:' + postId, json)
.sadd('blog:posts', postId)
.exec()
.then(
function onSuccess(data) {
// success handling goes here
},
function onError(data) {
// error handling goes here
}
);
}
答案 1 :(得分:1)
我不认为这是解决问题的正确方法,但我必须继续前进。 有史以来最简单的解决方案(柜台):
var id = 0;
function cpost(json) {
id++;
client.pipeline()
.incr('id', 'post')
.set('blog:post:' + id, json) // blog:post:1
.sadd('blog:posts', id) // blog:posts id:post
.exec(function (err, results) {
});
}