From 09de6fb9ae95762ebadc9f22f88091c3c4dc7882 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sat, 14 Mar 2026 17:39:43 -0400 Subject: [PATCH] perf: switch to set, remove parseFloat in redis add test to cover float --- src/database/redis/sorted.js | 8 ++++---- test/database/sorted.js | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/database/redis/sorted.js b/src/database/redis/sorted.js index 5b9652e6e0..8433133f15 100644 --- a/src/database/redis/sorted.js +++ b/src/database/redis/sorted.js @@ -301,7 +301,7 @@ module.exports = function (module) { const returnData = []; let done; - const seen = Object.create(null); + const seen = new Set(); do { /* eslint-disable no-await-in-loop */ const res = await module.client.zScan(params.key, cursor, { MATCH: params.match, COUNT: 5000 }); @@ -310,11 +310,11 @@ module.exports = function (module) { for (let i = 0; i < res.members.length; i ++) { const item = res.members[i]; - if (!seen[item.value]) { - seen[item.value] = 1; + if (!seen.has(item.value)) { + seen.add(item.value); if (params.withScores) { - returnData.push({ value: item.value, score: parseFloat(item.score) }); + returnData.push({ value: item.value, score: item.score }); } else { returnData.push(item.value); } diff --git a/test/database/sorted.js b/test/database/sorted.js index a375b2ec48..fde2bafb0b 100644 --- a/test/database/sorted.js +++ b/test/database/sorted.js @@ -93,6 +93,22 @@ NUMERIC)-- WsPn&query[cid]=-1&parentCid=0&selectedCids[]=-1&privilege=topics:rea }); assert.strictEqual(data.length, 0); }); + + it('should handle floating point scores', async () => { + await db.sortedSetAdd('scanzset6', [1.5, 2.5, 3.5, 4.5, 5.5, 6.5], ['aaab{', 'bbbb', 'bbcb', 'ddb', 'dddd', 'adb']); + const data = await db.getSortedSetScan({ + key: 'scanzset6', + match: '*b', + withScores: true, + }); + data.sort((a, b) => b.score - a.score); + assert.deepStrictEqual(data, [ + { value: 'adb', score: 6.5 }, + { value: 'ddb', score: 4.5 }, + { value: 'bbcb', score: 3.5 }, + { value: 'bbbb', score: 2.5 }, + ]); + }); }); describe('sortedSetAdd()', () => {