From e26cc798197d3d932d2cc4d840839fe3560d01ce Mon Sep 17 00:00:00 2001 From: adarqui Date: Sat, 21 Sep 2013 22:47:27 -0400 Subject: [PATCH] redis multi pipeline used for getPostsByPids --- src/posts.js | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/src/posts.js b/src/posts.js index dee76c0474..82c7ad30bb 100644 --- a/src/posts.js +++ b/src/posts.js @@ -153,7 +153,65 @@ var RDB = require('./redis.js'), } + + + /* getPostsByPids using redis's multi pipeline */ Posts.getPostsByPids = function(pids, callback) { + var posts = [] + var new_pids = [] + + var multi = RDB.multi(); + + for (v in pids) { + var _pid = pids[v] + multi.hgetall("post:"+_pid); + } + + multi.exec(function (err, replies) { + var pids = replies + async.eachSeries(pids, function(pid, _callback) { + var postData = pid + if(postData) { + postData.relativeTime = utils.relativeTime(postData.timestamp); + postData.post_rep = postData.reputation; + postData['edited-class'] = postData.editor !== '' ? '' : 'none'; + postData['relativeEditTime'] = postData.edited !== '0' ? utils.relativeTime (postData.edited) : ''; + + if(postData.uploadedImages) { + try { + postData.uploadedImages = JSON.parse(postData.uploadedImages); + } catch(err) { + postData.uploadedImages = []; + winston.err(err); + } + } else { + postData.uploadedImages = []; + } + + postTools.toHTML(postData.content, function(err, content) { + postData.content = content; + posts.push(postData); + }); + return _callback(null) + } + else { + return _callback(null) + } + }, function(err) { + if(!err) { + return callback(null, posts); + } else { + return callback(err, null); + } + }); + }) + } + + + + + + Posts.getPostsByPids_original = function(pids, callback) { var posts = []; async.eachSeries(pids, function(pid, callback) { @@ -432,4 +490,4 @@ var RDB = require('./redis.js'), }); } -}(exports)); \ No newline at end of file +}(exports));