Skip to content

Commit f36d487

Browse files
committed
fix: batch ioredis operations
1 parent 6f6da62 commit f36d487

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

src/db/transactions/db.ts

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ export class TransactionDB {
3838
private static cancelledTransactionsKey = `transaction:cancelled`;
3939
private static erroredTransactionsKey = `transaction:errored`;
4040

41+
// ioredis has limits over 100k+ (source: https://github.com/redis/ioredis/issues/801).
42+
private static REDIS_BATCH_SIZE = 100_000;
43+
4144
/**
4245
* Inserts or replaces a transaction details.
4346
* Also adds to the appropriate "status" sorted set.
@@ -109,13 +112,17 @@ export class TransactionDB {
109112
return [];
110113
}
111114

112-
const keys = queueIds.map(this.transactionDetailsKey);
113-
const vals = await redis.mget(...keys);
114-
115115
const result: AnyTransaction[] = [];
116-
for (const val of vals) {
117-
if (val) {
118-
result.push(superjson.parse(val));
116+
for (let i = 0; i < queueIds.length; i += this.REDIS_BATCH_SIZE) {
117+
const keys = queueIds
118+
.slice(i, i + this.REDIS_BATCH_SIZE)
119+
.map(this.transactionDetailsKey);
120+
const vals = await redis.mget(...keys);
121+
122+
for (const val of vals) {
123+
if (val) {
124+
result.push(superjson.parse(val));
125+
}
119126
}
120127
}
121128
return result;
@@ -131,8 +138,14 @@ export class TransactionDB {
131138
return 0;
132139
}
133140

134-
const keys = queueIds.map(this.transactionDetailsKey);
135-
return await redis.unlink(...keys);
141+
let numDeleted = 0;
142+
for (let i = 0; i < queueIds.length; i += this.REDIS_BATCH_SIZE) {
143+
const keys = queueIds
144+
.slice(i, i + this.REDIS_BATCH_SIZE)
145+
.map(this.transactionDetailsKey);
146+
numDeleted += await redis.unlink(...keys);
147+
}
148+
return numDeleted;
136149
};
137150

138151
/**

0 commit comments

Comments
 (0)