From 7780efa23934c9074db5beeb43da48e9ef9e72d3 Mon Sep 17 00:00:00 2001 From: cha0s Date: Thu, 16 Jul 2020 22:25:25 -0500 Subject: [PATCH] feat: keys with scan backend --- src/server/redis.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) 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; +};