diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 238686d4e..107fe1314 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -226,6 +226,7 @@ 'icon type-unknown': 'mdi mdi-help-box', 'icon equal': 'mdi mdi-equal', 'icon not-equal': 'mdi mdi-not-equal-variant', + 'icon warn': 'mdi mdi-alert', 'icon at': 'mdi mdi-at', 'icon expand-all': 'mdi mdi-expand-all', diff --git a/packages/web/src/widgets/DbKeysTree.svelte b/packages/web/src/widgets/DbKeysTree.svelte index 8512a9c71..512198a44 100644 --- a/packages/web/src/widgets/DbKeysTree.svelte +++ b/packages/web/src/widgets/DbKeysTree.svelte @@ -33,6 +33,7 @@ import AppObjectListHandler from './AppObjectListHandler.svelte'; import { getOpenDetailOnArrowsSettings } from '../settings/settingsTools'; import openNewTab from '../utility/openNewTab'; + import ConfirmModal from '../modals/ConfirmModal.svelte'; export let conid; export let database; @@ -83,20 +84,30 @@ if (loadNext) loadNextPage(); } - async function loadNextPage() { + async function loadNextPage(skipCount = false) { isLoading = true; const nextScan = await apiCall('database-connections/scan-keys', { conid, database, pattern: filter, cursor: model.cursor, - count: model.loadCount, + count: skipCount ? undefined : model.loadCount, }); model = dbKeys_mergeNextPage(model, nextScan); isLoading = false; } + async function loadAll() { + showModal(ConfirmModal, { + message: + 'This will scan all keys in the database, which could affect server performance. Do you want to continue?', + onConfirm: () => { + loadNextPage(true); + }, + }); + } + function reloadModel() { changeModel(model => dbKeys_clearLoadedData(model), true); } @@ -145,9 +156,14 @@ {:else} - - Scan more - +
+ loadNextPage()} title="Scan more keys"> + Scan more + + loadAll()} title="Scan all keys"> + Scan all + +
{/if} {/if} diff --git a/plugins/dbgate-plugin-redis/src/backend/driver.js b/plugins/dbgate-plugin-redis/src/backend/driver.js index ea8991c40..3603bf25f 100644 --- a/plugins/dbgate-plugin-redis/src/backend/driver.js +++ b/plugins/dbgate-plugin-redis/src/backend/driver.js @@ -203,7 +203,7 @@ const driver = { async scanKeys(dbhan, pattern, cursor = 0, count) { const match = pattern?.match(/[\?\[\{]/) ? pattern : pattern ? `*${pattern}*` : '*'; - const [nextCursor, keys] = await dbhan.client.scan(cursor, 'MATCH', match, 'COUNT', count); + const [nextCursor, keys] = await dbhan.client.scan(cursor, 'MATCH', match, 'COUNT', count ?? 2 ** 32); const dbsize = await dbhan.client.dbsize(); const keysMapped = keys.map((key) => ({ key,