mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-01 20:46:08 +00:00
Reduce memory allocation in LimitedMemoryAdapter (#272)
* refactor(LimitedMemoryAdapter): optimize scan function Reduced the memory allocation by not creating a different array to iterate. Precalculated wildcard * refactor(LimitedMemoryAdapter): optimize ulkGet function Optimize the ulkGet function by not creating a different array once. Used Set for faster lookups. * refactor(LimitedMemoryAdapter): rename keys to key in the get() function
This commit is contained in:
parent
5926b4df15
commit
4fb4861386
37
src/cache/adapters/limited.ts
vendored
37
src/cache/adapters/limited.ts
vendored
@ -63,32 +63,37 @@ export class LimitedMemoryAdapter<T> implements Adapter {
|
||||
scan(query: string, keys?: false): any[];
|
||||
scan(query: string, keys: true): string[];
|
||||
scan(query: string, keys = false) {
|
||||
const values: (string | unknown)[] = [];
|
||||
const sq = query.split('.');
|
||||
for (const iterator of [...this.storage.values()].flatMap(x => x.entries()))
|
||||
for (const [key, value] of iterator) {
|
||||
if (key.split('.').every((value, i) => (sq[i] === '*' ? !!value : sq[i] === value))) {
|
||||
values.push(keys ? key : this.options.decode(value.value));
|
||||
}
|
||||
}
|
||||
const isWildcard = sq.map(segment => segment === '*');
|
||||
|
||||
return values;
|
||||
return [...this.storage.values()].flatMap(storageEntry =>
|
||||
Array.from(storageEntry.entries())
|
||||
.filter(([key]) => key.split('.').every((value, i) => isWildcard[i] || sq[i] === value))
|
||||
.map(([key, value]) => (keys ? key : this.options.decode(value.value))),
|
||||
);
|
||||
}
|
||||
|
||||
bulkGet(keys: string[]) {
|
||||
const iterator = [...this.storage.values()];
|
||||
return keys
|
||||
.map(key => {
|
||||
const data = iterator.find(x => x.has(key))?.get(key);
|
||||
return data ? this.options.decode(data) : null;
|
||||
const storageArray = Array.from(this.storage.values());
|
||||
const keySet = new Set(keys);
|
||||
|
||||
return storageArray
|
||||
.flatMap(storageEntry => {
|
||||
const entries = Array.from(storageEntry.entries());
|
||||
return entries.filter(([key]) => keySet.has(key)).map(([, value]) => this.options.decode(value as T));
|
||||
})
|
||||
.filter(x => x);
|
||||
.filter(Boolean);
|
||||
}
|
||||
|
||||
get(keys: string) {
|
||||
const data = [...this.storage.values()].find(x => x.has(keys))?.get(keys);
|
||||
get(key: string) {
|
||||
for (const storageEntry of this.storage.values()) {
|
||||
if (storageEntry.has(key)) {
|
||||
const data = storageEntry.get(key);
|
||||
return data ? this.options.decode(data) : null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private __set(key: string, data: any) {
|
||||
const __guildId = Array.isArray(data) ? data[0].guild_id : data.guild_id;
|
||||
|
Loading…
x
Reference in New Issue
Block a user