Use redis 2 directly.
This commit is contained in:
parent
98b2b325a1
commit
1604d327da
@ -85,12 +85,11 @@
|
|||||||
"passport": "^0.3.0",
|
"passport": "^0.3.0",
|
||||||
"passport-local": "^1.0.0",
|
"passport-local": "^1.0.0",
|
||||||
"proxy-http-request": "0.1.0",
|
"proxy-http-request": "0.1.0",
|
||||||
"redis": "^0.12.1",
|
"redis": "^2.0.1",
|
||||||
"request": "^2.53.0",
|
"request": "^2.53.0",
|
||||||
"schema-inspector": "^1.5.1",
|
"schema-inspector": "^1.5.1",
|
||||||
"serve-static": "^1.9.2",
|
"serve-static": "^1.9.2",
|
||||||
"source-map-support": "^0.3.2",
|
"source-map-support": "^0.3.2",
|
||||||
"then-redis": "~1.3.0",
|
|
||||||
"trace": "^1.2.0",
|
"trace": "^1.2.0",
|
||||||
"ws": "~0.8.0",
|
"ws": "~0.8.0",
|
||||||
"xen-api": "^0.6.1",
|
"xen-api": "^0.6.1",
|
||||||
|
@ -6,7 +6,16 @@ import forEach from 'lodash.foreach'
|
|||||||
import getKey from 'lodash.keys'
|
import getKey from 'lodash.keys'
|
||||||
import isEmpty from 'lodash.isempty'
|
import isEmpty from 'lodash.isempty'
|
||||||
import map from 'lodash.map'
|
import map from 'lodash.map'
|
||||||
import thenRedis from 'then-redis'
|
import {createClient as createRedisClient, RedisClient, Multi} from 'redis'
|
||||||
|
|
||||||
|
import {promisifyAll} from '../utils'
|
||||||
|
|
||||||
|
// ===================================================================
|
||||||
|
|
||||||
|
promisifyAll(RedisClient.prototype)
|
||||||
|
promisifyAll(Multi.prototype)
|
||||||
|
|
||||||
|
// ===================================================================
|
||||||
|
|
||||||
// ///////////////////////////////////////////////////////////////////
|
// ///////////////////////////////////////////////////////////////////
|
||||||
// Data model:
|
// Data model:
|
||||||
@ -36,7 +45,7 @@ export default class Redis extends Collection {
|
|||||||
|
|
||||||
this.indexes = indexes
|
this.indexes = indexes
|
||||||
this.prefix = prefix
|
this.prefix = prefix
|
||||||
this.redis = connection || thenRedis.createClient(uri)
|
this.redis = connection || createRedisClient(uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
_extract (ids) {
|
_extract (ids) {
|
||||||
@ -45,7 +54,7 @@ export default class Redis extends Collection {
|
|||||||
|
|
||||||
const models = []
|
const models = []
|
||||||
return Bluebird.map(ids, id => {
|
return Bluebird.map(ids, id => {
|
||||||
return redis.hgetall(prefix + id).then(model => {
|
return redis.hgetallAsync(prefix + id).then(model => {
|
||||||
// If empty, consider it a no match.
|
// If empty, consider it a no match.
|
||||||
if (isEmpty(model)) {
|
if (isEmpty(model)) {
|
||||||
return
|
return
|
||||||
@ -68,10 +77,10 @@ export default class Redis extends Collection {
|
|||||||
return Bluebird.map(models, async function (model) {
|
return Bluebird.map(models, async function (model) {
|
||||||
// Generate a new identifier if necessary.
|
// Generate a new identifier if necessary.
|
||||||
if (model.id === undefined) {
|
if (model.id === undefined) {
|
||||||
model.id = idPrefix + String(await redis.incr(prefix + '_id'))
|
model.id = idPrefix + String(await redis.incrAsync(prefix + '_id'))
|
||||||
}
|
}
|
||||||
|
|
||||||
const success = await redis.sadd(prefix + '_ids', model.id)
|
const success = await redis.saddAsync(prefix + '_ids', model.id)
|
||||||
|
|
||||||
// The entry already exists an we are not in replace mode.
|
// The entry already exists an we are not in replace mode.
|
||||||
if (!success && !replace) {
|
if (!success && !replace) {
|
||||||
@ -91,7 +100,7 @@ export default class Redis extends Collection {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const promises = [
|
const promises = [
|
||||||
redis.hmset(prefix + ':' + model.id, ...params)
|
redis.hmsetAsync(prefix + ':' + model.id, ...params)
|
||||||
]
|
]
|
||||||
|
|
||||||
// Update indexes.
|
// Update indexes.
|
||||||
@ -102,7 +111,7 @@ export default class Redis extends Collection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const key = prefix + '_' + index + ':' + value
|
const key = prefix + '_' + index + ':' + value
|
||||||
promises.push(redis.sadd(key, model.id))
|
promises.push(redis.saddAsync(key, model.id))
|
||||||
})
|
})
|
||||||
|
|
||||||
await Promise.all(promises)
|
await Promise.all(promises)
|
||||||
@ -115,7 +124,7 @@ export default class Redis extends Collection {
|
|||||||
const {prefix, redis} = this
|
const {prefix, redis} = this
|
||||||
|
|
||||||
if (isEmpty(properties)) {
|
if (isEmpty(properties)) {
|
||||||
return redis.smembers(prefix + '_ids').then(ids => this._extract(ids))
|
return redis.smembersAsync(prefix + '_ids').then(ids => this._extract(ids))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special treatment for the identifier.
|
// Special treatment for the identifier.
|
||||||
@ -138,7 +147,7 @@ export default class Redis extends Collection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const keys = map(properties, (value, index) => prefix + '_' + index + ':' + value)
|
const keys = map(properties, (value, index) => prefix + '_' + index + ':' + value)
|
||||||
return redis.sinter(...keys).then(ids => this._extract(ids))
|
return redis.sinterAsync(...keys).then(ids => this._extract(ids))
|
||||||
}
|
}
|
||||||
|
|
||||||
_remove (ids) {
|
_remove (ids) {
|
||||||
@ -148,10 +157,10 @@ export default class Redis extends Collection {
|
|||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
// Remove the identifiers from the main index.
|
// Remove the identifiers from the main index.
|
||||||
redis.srem(prefix + '_ids', ...ids),
|
redis.sremAsync(prefix + '_ids', ...ids),
|
||||||
|
|
||||||
// Remove the models.
|
// Remove the models.
|
||||||
redis.del(map(ids, id => prefix + ':' + id))
|
redis.delAsync(map(ids, id => prefix + ':' + id))
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,6 +99,7 @@ export const pFinally = (promise, cb) => {
|
|||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
|
||||||
export {promisify}
|
export {promisify}
|
||||||
|
export {promisifyAll} from 'bluebird'
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user