optimize getPostIndices

only use 1 set when its in a topic
v1.18.x
barisusakli 11 years ago
parent 998ed24589
commit c5c97c784a

@ -151,6 +151,14 @@ module.exports = function(db, module) {
});
};
module.sortedSetsRanks = function(keys, values, callback) {
throw new Error('not implemented');
};
module.sortedSetRanks = function(key, values, callback) {
throw new Error('not implemented');
};
module.sortedSetRevRank = function(key, value, callback) {
module.getListRange(key, 0, -1, function(err, list) {
for (var i = list.length - 1, ii=0; i > ii; i--) {

@ -264,6 +264,21 @@ module.exports = function(db, module) {
}, callback);
};
module.sortedSetRanks = function(key, values, callback) {
module.getSortedSetRange(key, 0, -1, function(err, sortedSet) {
if (err) {
return callback(err);
}
var result = values.map(function(value) {
var index = sortedSet.indexOf(value.toString());
return index !== -1 ? index : null;
});
callback(null, result);
});
};
module.sortedSetScore = function(key, value, callback) {
if (!key) {
return callback();

@ -129,6 +129,14 @@ module.exports = function(redisClient, module) {
multi.exec(callback);
};
module.sortedSetRanks = function(key, values, callback) {
var multi = redisClient.multi();
for(var i=0; i<values.length; ++i) {
multi.zrank(key, values[i]);
}
multi.exec(callback);
};
module.sortedSetRevRank = function(key, value, callback) {
redisClient.zrevrank(key, value, callback);
};

@ -4,6 +4,7 @@ var async = require('async'),
path = require('path'),
fs = require('fs'),
nconf = require('nconf'),
_ = require('underscore'),
validator = require('validator'),
winston = require('winston'),
gravatar = require('gravatar'),
@ -534,24 +535,29 @@ var async = require('async'),
if (!Array.isArray(posts) || !posts.length) {
return callback(null, []);
}
user.getSettings(uid, function(err, settings) {
if (err) {
return callback(err);
}
var byVotes = settings.topicPostSort === 'most_votes';
var sets = posts.map(function(post) {
if (byVotes) {
return 'tid:' + post.tid + ':posts:votes';
} else {
return 'tid:' + post.tid + ':posts';
}
return byVotes ? 'tid:' + post.tid + ':posts:votes' : 'tid:' + post.tid + ':posts';
});
var uniqueSets = _.uniq(sets);
var method = 'sortedSetsRanks';
if (uniqueSets.length === 1) {
method = 'sortedSetRanks';
sets = uniqueSets[0];
}
var pids = posts.map(function(post) {
return post.pid;
});
db.sortedSetsRanks(sets, pids, function(err, indices) {
db[method](sets, pids, function(err, indices) {
if (err) {
return callback(err);
}

Loading…
Cancel
Save