Skip to content

Commit c5fbc9e

Browse files
Merge pull request #514 from jsdelivr/redis-4
perf: reduce data sent in probe sync
2 parents 986e7f0 + b6f2b9c commit c5fbc9e

File tree

10 files changed

+574
-68
lines changed

10 files changed

+574
-68
lines changed

src/lib/rate-limiter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import createHttpError from 'http-errors';
66
import type { ExtendedContext } from '../types.js';
77
import { credits } from './credits.js';
88

9-
const redisClient = await createPersistentRedisClient({ legacyMode: true });
9+
const redisClient = createPersistentRedisClient({ legacyMode: true });
1010

1111
export const anonymousRateLimiter = new RateLimiterRedis({
1212
storeClient: redisClient,

src/lib/redis/client.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ export type { RedisClient } from './shared.js';
66
let redis: RedisClient;
77

88
export const initRedisClient = async () => {
9-
redis = await createRedisClient();
9+
redis = createRedisClient();
1010
return redis;
1111
};
1212

13-
const createRedisClient = async (options?: RedisClientOptions): Promise<RedisClient> => {
13+
const createRedisClient = (options?: RedisClientOptions): RedisClient => {
1414
return createRedisClientInternal({
1515
...options,
1616
database: 2,
@@ -19,9 +19,6 @@ const createRedisClient = async (options?: RedisClientOptions): Promise<RedisCli
1919
};
2020

2121
export const getRedisClient = (): RedisClient => {
22-
if (!redis) {
23-
throw new Error('redis connection is not initialized yet');
24-
}
25-
22+
redis = createRedisClient();
2623
return redis;
2724
};

src/lib/redis/measurement-client.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ export type { RedisClient } from './shared.js';
66
let redis: RedisClient;
77

88
export const initMeasurementRedisClient = async () => {
9-
redis = await createMeasurementRedisClient();
9+
redis = createMeasurementRedisClient();
1010
return redis;
1111
};
1212

13-
export const createMeasurementRedisClient = async (options?: RedisClientOptions): Promise<RedisClient> => {
13+
export const createMeasurementRedisClient = (options?: RedisClientOptions): RedisClient => {
1414
return createRedisClientInternal({
1515
...options,
1616
database: 0,
@@ -19,9 +19,6 @@ export const createMeasurementRedisClient = async (options?: RedisClientOptions)
1919
};
2020

2121
export const getMeasurementRedisClient = (): RedisClient => {
22-
if (!redis) {
23-
throw new Error('redis connection to measurement db is not initialized yet');
24-
}
25-
22+
redis = createMeasurementRedisClient();
2623
return redis;
2724
};

src/lib/redis/persistent-client.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ export type { RedisClient } from './shared.js';
66
let redis: RedisClient;
77

88
export const initPersistentRedisClient = async () => {
9-
redis = await createPersistentRedisClient();
9+
redis = createPersistentRedisClient();
1010
return redis;
1111
};
1212

13-
export const createPersistentRedisClient = async (options?: RedisClientOptions): Promise<RedisClient> => {
13+
export const createPersistentRedisClient = (options?: RedisClientOptions): RedisClient => {
1414
return createRedisClientInternal({
1515
...options,
1616
database: 1,
@@ -19,9 +19,6 @@ export const createPersistentRedisClient = async (options?: RedisClientOptions):
1919
};
2020

2121
export const getPersistentRedisClient = (): RedisClient => {
22-
if (!redis) {
23-
throw new Error('redis connection to persistent db is not initialized yet');
24-
}
25-
22+
redis = createPersistentRedisClient();
2623
return redis;
2724
};

src/lib/redis/shared.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const logger = scopedLogger('redis-client');
1313

1414
export type RedisClient = RedisClientType<RedisDefaultModules, RedisFunctions, RedisScripts>;
1515

16-
export const createRedisClientInternal = async (options?: RedisClientOptions): Promise<RedisClient> => {
16+
export const createRedisClientInternal = (options?: RedisClientOptions): RedisClient => {
1717
const client = createClient({
1818
...config.util.toObject(config.get('redis')) as RedisClientOptions,
1919
...options,
@@ -23,9 +23,8 @@ export const createRedisClientInternal = async (options?: RedisClientOptions): P
2323
client
2424
.on('error', (error: Error) => logger.error('connection error', error))
2525
.on('ready', () => logger.info('connection ready'))
26-
.on('reconnecting', () => logger.info('reconnecting'));
27-
28-
await client.connect();
26+
.on('reconnecting', () => logger.info('reconnecting'))
27+
.connect().catch((error: Error) => logger.error('connection error', error));
2928

3029
return client;
3130
};

src/lib/ws/server.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ let io: WsServer;
2727
let syncedProbeList: SyncedProbeList;
2828

2929
export const initWsServer = async () => {
30-
const pubClient = getRedisClient().duplicate();
31-
const subClient = pubClient.duplicate();
30+
const redis = getRedisClient();
31+
const pubClient = redis.duplicate();
32+
const subClient = redis.duplicate();
3233

3334
await Promise.all([ pubClient.connect(), subClient.connect() ]);
3435

@@ -44,7 +45,7 @@ export const initWsServer = async () => {
4445
dynamicPrivateChannels: true,
4546
}));
4647

47-
syncedProbeList = new SyncedProbeList(io.of(PROBES_NAMESPACE), adoptedProbes);
48+
syncedProbeList = new SyncedProbeList(redis, io.of(PROBES_NAMESPACE), adoptedProbes);
4849

4950
await syncedProbeList.sync();
5051
syncedProbeList.scheduleSync();

0 commit comments

Comments
 (0)