diff --git a/src/server/redis.js b/src/server/redis.js index 4008425..83443a4 100644 --- a/src/server/redis.js +++ b/src/server/redis.js @@ -6,3 +6,27 @@ const { } = process.env; export default () => redis.createClient(REDIS_PORT, REDIS_HOST); + +const safeKeys = async (result, client, pattern, caret) => { + do { + // eslint-disable-next-line no-await-in-loop, no-loop-func + await new Promise((resolve, reject) => { + client.scan(caret, 'MATCH', pattern, (error, r) => { + if (error) { + reject(error); + return; + } + // eslint-disable-next-line no-param-reassign + caret = parseInt(r[0], 10); + result.push(...r[1]); + resolve(); + }); + }); + } while (0 !== caret); +}; + +export const keys = async (client, pattern) => { + const result = []; + await safeKeys(result, client, pattern, 0); + return result; +};