diff --git a/packages/web/src/widgets/DbKeysSubTree.svelte b/packages/web/src/widgets/DbKeysSubTree.svelte index 205dac931..e82d470b3 100644 --- a/packages/web/src/widgets/DbKeysSubTree.svelte +++ b/packages/web/src/widgets/DbKeysSubTree.svelte @@ -5,8 +5,7 @@ import LoadingInfo from '../elements/LoadingInfo.svelte'; import { apiCall } from '../utility/api'; - // const SHOW_INCREMENT = 500; - const SHOW_INCREMENT = 10; + const SHOW_INCREMENT = 100; import DbKeysTreeNode from './DbKeysTreeNode.svelte'; @@ -33,8 +32,6 @@ database, root, filter, - reloadToken, - reloadToken2, limit: maxShowCount + 1, }); items = result; @@ -54,11 +51,12 @@ } $: { + reloadToken; loadingWhole = true; } -{#if loading && items.length == 0} +{#if loadingWhole} {:else} {#each items.slice(0, maxShowCount) as item} diff --git a/plugins/dbgate-plugin-redis/src/backend/driver.js b/plugins/dbgate-plugin-redis/src/backend/driver.js index de1e1f6c4..111f24ffb 100644 --- a/plugins/dbgate-plugin-redis/src/backend/driver.js +++ b/plugins/dbgate-plugin-redis/src/backend/driver.js @@ -194,14 +194,36 @@ const driver = { }, async getKeys(dbhan, keyQuery = '*') { - const res = []; - let cursor = 0; - do { - const [strCursor, keys] = await dbhan.client.scan(cursor, 'MATCH', keyQuery, 'COUNT', 100); - res.push(...keys); - cursor = parseInt(strCursor); - } while (cursor > 0); - return res; + const stream = dbhan.client.scanStream({ + match: keyQuery, + count: 1000, + }); + + const keys = []; + + stream.on('data', (resultKeys) => { + for (const key of resultKeys) { + keys.push(key); + } + }); + + return new Promise((resolve, reject) => { + stream.on('end', () => { + resolve(keys); + }); + stream.on('error', (err) => { + reject(err); + }); + }); + + // const res = []; + // let cursor = 0; + // do { + // const [strCursor, keys] = await dbhan.client.scan(cursor, 'MATCH', keyQuery, 'COUNT', 100); + // res.push(...keys); + // cursor = parseInt(strCursor); + // } while (cursor > 0); + // return res; }, extractKeysFromLevel(dbhan, root, keys) {