This commit is contained in:
pen 2024-11-30 18:45:45 +00:00
parent 8076f78d06
commit 98366d1ed5
2 changed files with 36 additions and 3 deletions

View file

@ -14,9 +14,9 @@ export type FanoutTimelineName =
| `homeTimeline:${string}` | `homeTimeline:${string}`
| `homeTimelineWithFiles:${string}` // only notes with files are included | `homeTimelineWithFiles:${string}` // only notes with files are included
// local timeline // local timeline
| `localTimeline` // replies are not included | 'localTimeline' // replies are not included
| `localTimelineWithFiles` // only non-reply notes with files are included | 'localTimelineWithFiles' // only non-reply notes with files are included
| `localTimelineWithReplies` // only replies are included | 'localTimelineWithReplies' // only replies are included
| `localTimelineWithReplyTo:${string}` // Only replies to specific local user are included. Parameter is reply user id. | `localTimelineWithReplyTo:${string}` // Only replies to specific local user are included. Parameter is reply user id.
// antenna // antenna
@ -111,4 +111,34 @@ export class FanoutTimelineService {
public purge(name: FanoutTimelineName) { public purge(name: FanoutTimelineName) {
return this.redisForTimelines.del('list:' + name); return this.redisForTimelines.del('list:' + name);
} }
@bindThis
public async purgeAllcache() {
const timeLinePatterns = [
'*list:homeTimeline*',
'*list:localTimeline*',
'*list:antennaTimeline*',
'*list:userTimeline*',
'*list:userListTimeline*',
'*list:channelTimeline*',
'*list:roleTimeline*',
];
let timeLines = [] as string[];
for (const timeline of timeLinePatterns) {
let cursor = '0';
do {
const scanResult = await this.redisForTimelines.scan(cursor, 'MATCH', timeline, 'COUNT', 300);
cursor = scanResult[0];
timeLines = timeLines.concat(scanResult[1]);
scanResult[1].forEach(x => console.log(x));
} while (cursor !== '0');
}
const pipeline = this.redisForTimelines.pipeline();
for (const timeLine of timeLines) {
pipeline.del(`list:${timeLine.split('list:')[1]}`);
}
await pipeline.exec();
}
} }

View file

@ -12,6 +12,7 @@ import { GlobalEventService } from '@/core/GlobalEventService.js';
import { bindThis } from '@/decorators.js'; import { bindThis } from '@/decorators.js';
import type { GlobalEvents } from '@/core/GlobalEventService.js'; import type { GlobalEvents } from '@/core/GlobalEventService.js';
import { FeaturedService } from '@/core/FeaturedService.js'; import { FeaturedService } from '@/core/FeaturedService.js';
import { FanoutTimelineService } from './FanoutTimelineService.js';
import type { OnApplicationShutdown } from '@nestjs/common'; import type { OnApplicationShutdown } from '@nestjs/common';
@Injectable() @Injectable()
@ -28,6 +29,7 @@ export class MetaService implements OnApplicationShutdown {
private featuredService: FeaturedService, private featuredService: FeaturedService,
private globalEventService: GlobalEventService, private globalEventService: GlobalEventService,
private fanoutTimelineService: FanoutTimelineService,
) { ) {
//this.onMessage = this.onMessage.bind(this); //this.onMessage = this.onMessage.bind(this);
@ -112,6 +114,7 @@ export class MetaService implements OnApplicationShutdown {
before = metas[0]; before = metas[0];
if (before) { if (before) {
if (before.enableFanoutTimeline === true && data.enableFanoutTimeline === false) this.fanoutTimelineService.purgeAllcache();
await transactionalEntityManager.update(MiMeta, before.id, data); await transactionalEntityManager.update(MiMeta, before.id, data);
const metas = await transactionalEntityManager.find(MiMeta, { const metas = await transactionalEntityManager.find(MiMeta, {