perf: switch to set, remove parseFloat in redis

add test to cover float
This commit is contained in:
Barış Soner Uşaklı
2026-03-14 17:39:43 -04:00
parent 698758d994
commit 09de6fb9ae
2 changed files with 20 additions and 4 deletions

View File

@@ -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);
}

View File

@@ -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()', () => {