mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
* switch to ioredis
also need this fix in redisearch:
redis-search.js:98
```
redisClient.multi(cmds).exec(function(err, ids) {
if (err) {
return callback(err);
}
var errRes = ids[resultIndex];
if (errRes[0]) {
return callback(errRes[0]);
}
callback(null, errRes[1]);
});
```
* dbsearch compatible with ioredis
* fixed dbsearch?
This commit is contained in:
@@ -85,7 +85,7 @@
|
|||||||
"@nodebb/bootswatch": "3.4.2",
|
"@nodebb/bootswatch": "3.4.2",
|
||||||
"nconf": "^0.11.2",
|
"nconf": "^0.11.2",
|
||||||
"nodebb-plugin-composer-default": "6.5.27",
|
"nodebb-plugin-composer-default": "6.5.27",
|
||||||
"nodebb-plugin-dbsearch": "4.2.0",
|
"nodebb-plugin-dbsearch": "5.0.1",
|
||||||
"nodebb-plugin-emoji": "^3.5.0",
|
"nodebb-plugin-emoji": "^3.5.0",
|
||||||
"nodebb-plugin-emoji-android": "2.0.5",
|
"nodebb-plugin-emoji-android": "2.0.5",
|
||||||
"nodebb-plugin-markdown": "8.12.10",
|
"nodebb-plugin-markdown": "8.12.10",
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
"postcss": "8.2.15",
|
"postcss": "8.2.15",
|
||||||
"postcss-clean": "1.2.0",
|
"postcss-clean": "1.2.0",
|
||||||
"prompt": "^1.1.0",
|
"prompt": "^1.1.0",
|
||||||
"redis": "3.1.2",
|
"ioredis": "4.27.2",
|
||||||
"request": "2.88.2",
|
"request": "2.88.2",
|
||||||
"request-promise-native": "^1.0.9",
|
"request-promise-native": "^1.0.9",
|
||||||
"requirejs": "2.3.6",
|
"requirejs": "2.3.6",
|
||||||
@@ -182,4 +182,4 @@
|
|||||||
"url": "https://github.com/barisusakli"
|
"url": "https://github.com/barisusakli"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,37 +1,34 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const nconf = require('nconf');
|
const nconf = require('nconf');
|
||||||
const redis = require('redis');
|
const Redis = require('ioredis');
|
||||||
const winston = require('winston');
|
const winston = require('winston');
|
||||||
const _ = require('lodash');
|
|
||||||
|
|
||||||
const connection = module.exports;
|
const connection = module.exports;
|
||||||
|
|
||||||
connection.getConnectionOptions = function (redis) {
|
|
||||||
redis = redis || nconf.get('redis');
|
|
||||||
const connOptions = {};
|
|
||||||
if (redis.password) {
|
|
||||||
connOptions.auth_pass = redis.password;
|
|
||||||
}
|
|
||||||
if (redis.hasOwnProperty('database')) {
|
|
||||||
connOptions.db = redis.database;
|
|
||||||
}
|
|
||||||
return _.merge(connOptions, redis.options || {});
|
|
||||||
};
|
|
||||||
|
|
||||||
connection.connect = async function (options) {
|
connection.connect = async function (options) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
options = options || nconf.get('redis');
|
options = options || nconf.get('redis');
|
||||||
const redis_socket_or_host = options.host;
|
const redis_socket_or_host = options.host;
|
||||||
const connOptions = connection.getConnectionOptions(options);
|
|
||||||
|
|
||||||
let cxn;
|
let cxn;
|
||||||
if (redis_socket_or_host && String(redis_socket_or_host).indexOf('/') >= 0) {
|
if (redis_socket_or_host && String(redis_socket_or_host).indexOf('/') >= 0) {
|
||||||
/* If redis.host contains a path name character, use the unix dom sock connection. ie, /tmp/redis.sock */
|
// If redis.host contains a path name character, use the unix dom sock connection. ie, /tmp/redis.sock
|
||||||
cxn = redis.createClient(options.host, connOptions);
|
cxn = new Redis({
|
||||||
|
...options.options,
|
||||||
|
path: redis_socket_or_host,
|
||||||
|
password: options.password,
|
||||||
|
db: options.database,
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
/* Else, connect over tcp/ip */
|
// Else, connect over tcp/ip
|
||||||
cxn = redis.createClient(options.port, options.host, connOptions);
|
cxn = new Redis({
|
||||||
|
...options.options,
|
||||||
|
host: redis_socket_or_host,
|
||||||
|
port: options.port,
|
||||||
|
password: options.password,
|
||||||
|
db: options.database,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const dbIdx = parseInt(options.database, 10);
|
const dbIdx = parseInt(options.database, 10);
|
||||||
@@ -44,6 +41,8 @@ connection.connect = async function (options) {
|
|||||||
reject(err);
|
reject(err);
|
||||||
});
|
});
|
||||||
cxn.on('ready', () => {
|
cxn.on('ready', () => {
|
||||||
|
// back-compat with node_redis
|
||||||
|
cxn.batch = cxn.pipeline;
|
||||||
resolve(cxn);
|
resolve(cxn);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -111,6 +111,14 @@ module.exports = function (module) {
|
|||||||
data = [await module.client.async.hgetall(unCachedKeys[0])];
|
data = [await module.client.async.hgetall(unCachedKeys[0])];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convert empty objects into null for back-compat with node_redis
|
||||||
|
data = data.map((elem) => {
|
||||||
|
if (!Object.keys(elem).length) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return elem;
|
||||||
|
});
|
||||||
|
|
||||||
unCachedKeys.forEach((key, i) => {
|
unCachedKeys.forEach((key, i) => {
|
||||||
cachedData[key] = data[i] || null;
|
cachedData[key] = data[i] || null;
|
||||||
cache.set(key, cachedData[key]);
|
cache.set(key, cachedData[key]);
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const util = require('util');
|
|
||||||
|
|
||||||
const helpers = module.exports;
|
const helpers = module.exports;
|
||||||
|
|
||||||
helpers.noop = function () {};
|
helpers.noop = function () {};
|
||||||
|
|
||||||
helpers.execBatch = async function (batch) {
|
helpers.execBatch = async function (batch) {
|
||||||
const proFn = util.promisify(batch.exec).bind(batch);
|
const results = await batch.exec();
|
||||||
return await proFn();
|
return results.map(([err, res]) => {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
helpers.resultsToBool = function (results) {
|
helpers.resultsToBool = function (results) {
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ module.exports = function (module) {
|
|||||||
if (!Array.isArray(key)) {
|
if (!Array.isArray(key)) {
|
||||||
key = [key];
|
key = [key];
|
||||||
}
|
}
|
||||||
|
if (!value.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const batch = module.client.batch();
|
const batch = module.client.batch();
|
||||||
key.forEach(k => batch.srem(String(k), value));
|
key.forEach(k => batch.srem(String(k), value));
|
||||||
|
|||||||
Reference in New Issue
Block a user