LRUSet for seenEvents
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
import Dexie, { Table } from "dexie";
|
import Dexie, { Table } from "dexie";
|
||||||
import { TaggedNostrEvent, ReqFilter as Filter } from "@snort/system";
|
import { TaggedNostrEvent, ReqFilter as Filter } from "@snort/system";
|
||||||
import * as Comlink from "comlink";
|
import * as Comlink from "comlink";
|
||||||
|
import LRUSet from "@/Cache/LRUSet";
|
||||||
|
|
||||||
type Tag = {
|
type Tag = {
|
||||||
id: string;
|
id: string;
|
||||||
@ -15,7 +16,7 @@ class IndexedDB extends Dexie {
|
|||||||
events!: Table<TaggedNostrEvent>;
|
events!: Table<TaggedNostrEvent>;
|
||||||
tags!: Table<Tag>;
|
tags!: Table<Tag>;
|
||||||
private saveQueue: SaveQueueEntry[] = [];
|
private saveQueue: SaveQueueEntry[] = [];
|
||||||
private seenEvents = new Set<string>(); // LRU set maybe?
|
private seenEvents = new LRUSet<string>(1000);
|
||||||
private subscribedEventIds = new Set<string>();
|
private subscribedEventIds = new Set<string>();
|
||||||
private subscribedAuthors = new Set<string>();
|
private subscribedAuthors = new Set<string>();
|
||||||
private subscribedTags = new Set<string>();
|
private subscribedTags = new Set<string>();
|
||||||
|
23
packages/app/src/Cache/LRUSet.ts
Normal file
23
packages/app/src/Cache/LRUSet.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
export default class LRUSet<T> {
|
||||||
|
private set = new Set<T>();
|
||||||
|
private limit: number;
|
||||||
|
|
||||||
|
constructor(limit: number) {
|
||||||
|
this.limit = limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
add(item: T) {
|
||||||
|
if (this.set.size >= this.limit) {
|
||||||
|
this.set.delete(this.set.values().next().value);
|
||||||
|
}
|
||||||
|
this.set.add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
has(item: T) {
|
||||||
|
return this.set.has(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
values() {
|
||||||
|
return this.set.values();
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user