tune cache lifetimes
This commit is contained in:
		
							parent
							
								
									3688f1dadf
								
							
						
					
					
						commit
						672f1ea684
					
				
					 8 changed files with 16 additions and 18 deletions
				
			
		| 
						 | 
				
			
			@ -29,7 +29,7 @@ export class AvatarDecorationService implements OnApplicationShutdown {
 | 
			
		|||
		private moderationLogService: ModerationLogService,
 | 
			
		||||
		private globalEventService: GlobalEventService,
 | 
			
		||||
	) {
 | 
			
		||||
		this.cache = new MemorySingleCache<MiAvatarDecoration[]>(1000 * 60 * 30);
 | 
			
		||||
		this.cache = new MemorySingleCache<MiAvatarDecoration[]>(1000 * 60 * 30); // 30s
 | 
			
		||||
 | 
			
		||||
		this.redisForSub.on('message', this.onMessage);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,7 @@ const parseEmojiStrRegexp = /^([-\w]+)(?:@([\w.-]+))?$/;
 | 
			
		|||
 | 
			
		||||
@Injectable()
 | 
			
		||||
export class CustomEmojiService implements OnApplicationShutdown {
 | 
			
		||||
	private cache: MemoryKVCache<MiEmoji | null>;
 | 
			
		||||
	private emojisCache: MemoryKVCache<MiEmoji | null>;
 | 
			
		||||
	public localEmojisCache: RedisSingleCache<Map<string, MiEmoji>>;
 | 
			
		||||
 | 
			
		||||
	constructor(
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +49,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
 | 
			
		|||
		private globalEventService: GlobalEventService,
 | 
			
		||||
		private driveService: DriveService,
 | 
			
		||||
	) {
 | 
			
		||||
		this.cache = new MemoryKVCache<MiEmoji | null>(1000 * 60 * 60 * 12);
 | 
			
		||||
		this.emojisCache = new MemoryKVCache<MiEmoji | null>(1000 * 60 * 60 * 12); // 12h
 | 
			
		||||
 | 
			
		||||
		this.localEmojisCache = new RedisSingleCache<Map<string, MiEmoji>>(this.redisClient, 'localEmojis', {
 | 
			
		||||
			lifetime: 1000 * 60 * 30, // 30m
 | 
			
		||||
| 
						 | 
				
			
			@ -350,14 +350,14 @@ export class CustomEmojiService implements OnApplicationShutdown {
 | 
			
		|||
		if (name == null) return null;
 | 
			
		||||
		if (host == null) return null;
 | 
			
		||||
 | 
			
		||||
		const newHost = host === this.config.host ? null : host; 
 | 
			
		||||
		const newHost = host === this.config.host ? null : host;
 | 
			
		||||
 | 
			
		||||
		const queryOrNull = async () => (await this.emojisRepository.findOneBy({
 | 
			
		||||
			name,
 | 
			
		||||
			host: newHost ?? IsNull(),
 | 
			
		||||
		})) ?? null;
 | 
			
		||||
 | 
			
		||||
		const emoji = await this.cache.fetch(`${name} ${host}`, queryOrNull);
 | 
			
		||||
		const emoji = await this.emojisCache.fetch(`${name} ${host}`, queryOrNull);
 | 
			
		||||
 | 
			
		||||
		if (emoji == null) return null;
 | 
			
		||||
		return emoji.publicUrl || emoji.originalUrl; // || emoji.originalUrl してるのは後方互換性のため(publicUrlはstringなので??はだめ)
 | 
			
		||||
| 
						 | 
				
			
			@ -384,7 +384,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
 | 
			
		|||
	 */
 | 
			
		||||
	@bindThis
 | 
			
		||||
	public async prefetchEmojis(emojis: { name: string; host: string | null; }[]): Promise<void> {
 | 
			
		||||
		const notCachedEmojis = emojis.filter(emoji => this.cache.get(`${emoji.name} ${emoji.host}`) == null);
 | 
			
		||||
		const notCachedEmojis = emojis.filter(emoji => this.emojisCache.get(`${emoji.name} ${emoji.host}`) == null);
 | 
			
		||||
		const emojisQuery: any[] = [];
 | 
			
		||||
		const hosts = new Set(notCachedEmojis.map(e => e.host));
 | 
			
		||||
		for (const host of hosts) {
 | 
			
		||||
| 
						 | 
				
			
			@ -399,7 +399,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
 | 
			
		|||
			select: ['name', 'host', 'originalUrl', 'publicUrl'],
 | 
			
		||||
		}) : [];
 | 
			
		||||
		for (const emoji of _emojis) {
 | 
			
		||||
			this.cache.set(`${emoji.name} ${emoji.host}`, emoji);
 | 
			
		||||
			this.emojisCache.set(`${emoji.name} ${emoji.host}`, emoji);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -424,7 +424,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
 | 
			
		|||
 | 
			
		||||
	@bindThis
 | 
			
		||||
	public dispose(): void {
 | 
			
		||||
		this.cache.dispose();
 | 
			
		||||
		this.emojisCache.dispose();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@bindThis
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,7 @@ export class RelayService {
 | 
			
		|||
		private createSystemUserService: CreateSystemUserService,
 | 
			
		||||
		private apRendererService: ApRendererService,
 | 
			
		||||
	) {
 | 
			
		||||
		this.relaysCache = new MemorySingleCache<MiRelay[]>(1000 * 60 * 10);
 | 
			
		||||
		this.relaysCache = new MemorySingleCache<MiRelay[]>(1000 * 60 * 10); // 10s
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@bindThis
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -129,10 +129,8 @@ export class RoleService implements OnApplicationShutdown, OnModuleInit {
 | 
			
		|||
		private moderationLogService: ModerationLogService,
 | 
			
		||||
		private fanoutTimelineService: FanoutTimelineService,
 | 
			
		||||
	) {
 | 
			
		||||
		//this.onMessage = this.onMessage.bind(this);
 | 
			
		||||
 | 
			
		||||
		this.rolesCache = new MemorySingleCache<MiRole[]>(1000 * 60 * 60 * 1);
 | 
			
		||||
		this.roleAssignmentByUserIdCache = new MemoryKVCache<MiRoleAssignment[]>(1000 * 60 * 60 * 1);
 | 
			
		||||
		this.rolesCache = new MemorySingleCache<MiRole[]>(1000 * 60 * 60); // 1h
 | 
			
		||||
		this.roleAssignmentByUserIdCache = new MemoryKVCache<MiRoleAssignment[]>(1000 * 60 * 5); // 1h
 | 
			
		||||
 | 
			
		||||
		this.redisForSub.on('message', this.onMessage);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ export class UserKeypairService implements OnApplicationShutdown {
 | 
			
		|||
	) {
 | 
			
		||||
		this.cache = new RedisKVCache<MiUserKeypair>(this.redisClient, 'userKeypair', {
 | 
			
		||||
			lifetime: 1000 * 60 * 60 * 24, // 24h
 | 
			
		||||
			memoryCacheLifetime: 1000 * 60 * 60 * 12, // 12h
 | 
			
		||||
			memoryCacheLifetime: 1000 * 60 * 60, // 1h
 | 
			
		||||
			fetcher: (key) => this.userKeypairsRepository.findOneByOrFail({ userId: key }),
 | 
			
		||||
			toRedisConverter: (value) => JSON.stringify(value),
 | 
			
		||||
			fromRedisConverter: (value) => JSON.parse(value),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ export class DeliverProcessorService {
 | 
			
		|||
		private queueLoggerService: QueueLoggerService,
 | 
			
		||||
	) {
 | 
			
		||||
		this.logger = this.queueLoggerService.logger.createSubLogger('deliver');
 | 
			
		||||
		this.suspendedHostsCache = new MemorySingleCache<MiInstance[]>(1000 * 60 * 60);
 | 
			
		||||
		this.suspendedHostsCache = new MemorySingleCache<MiInstance[]>(1000 * 60 * 60); // 1m
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@bindThis
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ export class NodeinfoServerService {
 | 
			
		|||
			return document;
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		const cache = new MemorySingleCache<Awaited<ReturnType<typeof nodeinfo2>>>(1000 * 60 * 10);
 | 
			
		||||
		const cache = new MemorySingleCache<Awaited<ReturnType<typeof nodeinfo2>>>(1000 * 60 * 10); // 10s
 | 
			
		||||
 | 
			
		||||
		fastify.get(nodeinfo2_1path, async (request, reply) => {
 | 
			
		||||
			const base = await cache.fetch(() => nodeinfo2(21));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,8 +38,8 @@ export class UrlPreviewService {
 | 
			
		|||
	) {
 | 
			
		||||
		this.logger = this.loggerService.getLogger('url-preview');
 | 
			
		||||
		this.previewCache = new RedisKVCache<SummalyResult>(this.redisClient, 'summaly', {
 | 
			
		||||
			lifetime: 1000 * 86400,
 | 
			
		||||
			memoryCacheLifetime: 1000 * 10 * 60,
 | 
			
		||||
			lifetime: 1000 * 60 * 60 * 24, // 1d
 | 
			
		||||
			memoryCacheLifetime: 1000 * 60 * 10, // 10m
 | 
			
		||||
			fetcher: (key: string) => { throw new Error('the UrlPreview cache should never fetch'); },
 | 
			
		||||
			toRedisConverter: (value) => JSON.stringify(value),
 | 
			
		||||
			fromRedisConverter: (value) => JSON.parse(value),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue