From a79896aa2eaa08c40da4c2be127b8475f7a75918 Mon Sep 17 00:00:00 2001 From: Stela Augustinova Date: Wed, 10 Dec 2025 16:46:13 +0100 Subject: [PATCH] Added TTL for hash fields --- .../dbgate-plugin-redis/src/backend/driver.js | 16 +++++++++++++++- .../dbgate-plugin-redis/src/frontend/driver.js | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/plugins/dbgate-plugin-redis/src/backend/driver.js b/plugins/dbgate-plugin-redis/src/backend/driver.js index dfd176302..765fafae9 100644 --- a/plugins/dbgate-plugin-redis/src/backend/driver.js +++ b/plugins/dbgate-plugin-redis/src/backend/driver.js @@ -538,9 +538,23 @@ const driver = { } case 'hash': { const res = await dbhan.client.hscan(key, cursor, 'COUNT', count); + const fields = _.chunk(res[1], 2); + + // Get TTL for each hash field (Redis 7.4+) + const items = await Promise.all( + fields.map(async ([fieldKey, fieldValue]) => { + try { + const ttl = await dbhan.client.call('HTTL', key, 'FIELDS', 1, fieldKey); + return { key: fieldKey, value: fieldValue, TTL: ttl && ttl[0] !== undefined ? ttl[0] : null }; + } catch (e) { + return { key: fieldKey, value: fieldValue }; + } + }) + ); + return { cursor: parseInt(res[0]), - items: _.chunk(res[1], 2).map((item) => ({ key: item[0], value: item[1] })), + items, }; } case 'stream': { diff --git a/plugins/dbgate-plugin-redis/src/frontend/driver.js b/plugins/dbgate-plugin-redis/src/frontend/driver.js index bb24ba02b..76c34e347 100644 --- a/plugins/dbgate-plugin-redis/src/frontend/driver.js +++ b/plugins/dbgate-plugin-redis/src/frontend/driver.js @@ -63,7 +63,7 @@ const driver = { { name: 'hash', label: 'Hash', - dbKeyFields: [{ name: 'key' }, { name: 'value' }], + dbKeyFields: [{ name: 'key' }, { name: 'value' }, { name: 'TTL' }], keyColumn: 'key', addMethod: 'hset', showItemList: true,