feat(xo-server/collection/Redis): set of all indexes
This commit is contained in:
parent
af2d17b7a5
commit
7941284a1d
@ -18,6 +18,7 @@ import Collection, { ModelAlreadyExists } from '../collection.mjs'
|
|||||||
// ///////////////////////////////////////////////////////////////////
|
// ///////////////////////////////////////////////////////////////////
|
||||||
// Data model:
|
// Data model:
|
||||||
// - 'xo::namespaces': set of all available namespaces
|
// - 'xo::namespaces': set of all available namespaces
|
||||||
|
// - prefix + '::indexes': set containing all indexes;
|
||||||
// - prefix +'_ids': set containing identifier of all models;
|
// - prefix +'_ids': set containing identifier of all models;
|
||||||
// - prefix +'_'+ index +':' + lowerCase(value): set of identifiers
|
// - prefix +'_'+ index +':' + lowerCase(value): set of identifiers
|
||||||
// which have value for the given index.
|
// which have value for the given index.
|
||||||
@ -69,18 +70,23 @@ export default class Redis extends Collection {
|
|||||||
::ignoreErrors()
|
::ignoreErrors()
|
||||||
}
|
}
|
||||||
|
|
||||||
rebuildIndexes() {
|
async rebuildIndexes() {
|
||||||
const { indexes, prefix, redis } = this
|
const { indexes, prefix, redis } = this
|
||||||
|
|
||||||
|
await redis.del(`${prefix}::indexes`)
|
||||||
|
|
||||||
if (indexes.length === 0) {
|
if (indexes.length === 0) {
|
||||||
return Promise.resolve()
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const idsIndex = `${prefix}_ids`
|
await redis.sadd(`${prefix}::indexes`, indexes)
|
||||||
return asyncMapSettled(indexes, index =>
|
|
||||||
|
await asyncMapSettled(indexes, index =>
|
||||||
redis.keys(`${prefix}_${index}:*`).then(keys => keys.length !== 0 && redis.del(keys))
|
redis.keys(`${prefix}_${index}:*`).then(keys => keys.length !== 0 && redis.del(keys))
|
||||||
).then(() =>
|
)
|
||||||
asyncMapSettled(redis.smembers(idsIndex), id =>
|
|
||||||
|
const idsIndex = `${prefix}_ids`
|
||||||
|
await asyncMapSettled(redis.smembers(idsIndex), id =>
|
||||||
redis.hgetall(`${prefix}:${id}`).then(values =>
|
redis.hgetall(`${prefix}:${id}`).then(values =>
|
||||||
values == null
|
values == null
|
||||||
? redis.srem(idsIndex, id) // entry no longer exists
|
? redis.srem(idsIndex, id) // entry no longer exists
|
||||||
@ -92,7 +98,6 @@ export default class Redis extends Collection {
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_extract(ids) {
|
_extract(ids) {
|
||||||
|
Loading…
Reference in New Issue
Block a user