mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-11 22:17:14 +03:00
Use broadcast mode for client tracking and add new memory cache stat
This commit is contained in:
@@ -16,8 +16,10 @@ export interface RedisStats {
|
|||||||
avgReadTime: number;
|
avgReadTime: number;
|
||||||
avgWriteTime: number;
|
avgWriteTime: number;
|
||||||
memoryCacheHits: number
|
memoryCacheHits: number
|
||||||
|
memoryCacheTotalHits: number
|
||||||
memoryCacheLength: number;
|
memoryCacheLength: number;
|
||||||
memoryCacheSize: number;
|
memoryCacheSize: number;
|
||||||
|
lastInvalidation: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface RedisSB {
|
interface RedisSB {
|
||||||
@@ -55,6 +57,8 @@ let writeRequests = 0;
|
|||||||
|
|
||||||
let memoryCacheHits = 0;
|
let memoryCacheHits = 0;
|
||||||
let memoryCacheMisses = 0;
|
let memoryCacheMisses = 0;
|
||||||
|
let memoryCacheUncachedMisses = 0;
|
||||||
|
let lastInvalidation = 0;
|
||||||
|
|
||||||
const readResponseTime: number[] = [];
|
const readResponseTime: number[] = [];
|
||||||
const writeResponseTime: number[] = [];
|
const writeResponseTime: number[] = [];
|
||||||
@@ -89,11 +93,14 @@ if (config.redis?.enabled) {
|
|||||||
return Promise.resolve(cache.get(key));
|
return Promise.resolve(cache.get(key));
|
||||||
} else if (shouldClientCacheKey(key)) {
|
} else if (shouldClientCacheKey(key)) {
|
||||||
memoryCacheMisses++;
|
memoryCacheMisses++;
|
||||||
|
} else {
|
||||||
|
memoryCacheUncachedMisses++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (memoryCacheHits + memoryCacheMisses > 50000) {
|
if (memoryCacheHits + memoryCacheMisses > 50000) {
|
||||||
memoryCacheHits = 0;
|
memoryCacheHits = 0;
|
||||||
memoryCacheMisses = 0;
|
memoryCacheMisses = 0;
|
||||||
|
memoryCacheUncachedMisses = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return exportClient.get(key).then((reply) => {
|
return exportClient.get(key).then((reply) => {
|
||||||
@@ -284,8 +291,10 @@ export function getRedisStats(): RedisStats {
|
|||||||
avgReadTime: readResponseTime.length > 0 ? readResponseTime.reduce((a, b) => a + b, 0) / readResponseTime.length : 0,
|
avgReadTime: readResponseTime.length > 0 ? readResponseTime.reduce((a, b) => a + b, 0) / readResponseTime.length : 0,
|
||||||
avgWriteTime: writeResponseTime.length > 0 ? writeResponseTime.reduce((a, b) => a + b, 0) / writeResponseTime.length : 0,
|
avgWriteTime: writeResponseTime.length > 0 ? writeResponseTime.reduce((a, b) => a + b, 0) / writeResponseTime.length : 0,
|
||||||
memoryCacheHits: memoryCacheHits / (memoryCacheHits + memoryCacheMisses),
|
memoryCacheHits: memoryCacheHits / (memoryCacheHits + memoryCacheMisses),
|
||||||
|
memoryCacheTotalHits: memoryCacheHits / (memoryCacheHits + memoryCacheMisses + memoryCacheUncachedMisses),
|
||||||
memoryCacheLength: cache?.size ?? 0,
|
memoryCacheLength: cache?.size ?? 0,
|
||||||
memoryCacheSize: cache?.calculatedSize ?? 0
|
memoryCacheSize: cache?.calculatedSize ?? 0,
|
||||||
|
lastInvalidation
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,6 +305,8 @@ async function setupCacheClientListener(cacheClient: RedisClientType,
|
|||||||
|
|
||||||
cacheClient.subscribe("__redis__:invalidate", (messages) => {
|
cacheClient.subscribe("__redis__:invalidate", (messages) => {
|
||||||
cache.delete(messages?.[0]);
|
cache.delete(messages?.[0]);
|
||||||
|
|
||||||
|
lastInvalidation = Date.now();
|
||||||
}).catch(Logger.error);
|
}).catch(Logger.error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,7 +315,7 @@ async function setupCacheClientTracking(client: RedisClientType,
|
|||||||
|
|
||||||
if (!client || !cacheClient.isReady) return;
|
if (!client || !cacheClient.isReady) return;
|
||||||
|
|
||||||
await client.sendCommand(["CLIENT", "TRACKING", "ON", "REDIRECT", cacheConnectionClientId]);
|
await client.sendCommand(["CLIENT", "TRACKING", "ON", "REDIRECT", cacheConnectionClientId, "BCAST"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default exportClient;
|
export default exportClient;
|
||||||
|
|||||||
Reference in New Issue
Block a user