A disk-based persistent cache.
npm install extra-disk-cachesh
npm install --save extra-disk-cache
or
yarn add extra-disk-cache
`Usage
`ts
import { DiskCache } from 'extra-disk-cache'
import ms from 'ms'const cache = await DiskCache.create('/tmp/cache')
cache.set('key', Buffer.from('value'), ms('1h'))
const value = cache.get('key')?.toString()
`API
$3
`ts
class DiskCache {
static create(filename?: string): Promise close(): void
has(key: string): boolean
get(key: string): Buffer | undefined
getWithMetadata(key: string): {
value: Buffer
updatedAt: number
timeToLive: number | null
} | undefined
set(
key: string
, value: Buffer
/**
*
timeToLive > 0: items will expire after timeToLive milliseconds.
* timeToLive = 0: items will expire immediately.
* timeToLive = null: items will not expire.
*/
, timeToLive: number | null = null
): void delete(key: string): void
clear(): void
keys(): IterableIterator
}
`$3
`ts
interface ICache {
set(
key: string
, value:
| {
value: Buffer
updatedAt: number
timeToLive: number | null
}
| false
, timeToLive?: number
): void get(key: string):
| {
value: Buffer
updatedAt: number
timeToLive: number | null
}
| false
| undefined
delete(key: string): void
clear(): void
}
class DiskCacheWithCache {
constructor(diskCache: DiskCache, memoryCache: ICache)
close(): void
has(key: string): boolean
get(key: string): Buffer | undefined
getWithMetadata(key: string): {
value: Buffer
updatedAt: number
timeToLive: number | null
} | undefined
set(key: string, value: Buffer, timeToLive: number | null = null): void
delete(key: string): void
clear(): void
keys(): IterableIterator
}
`$3
`ts
interface IKeyConverter {
toString: (value: T) => string
fromString: (value: string) => T | undefined
}interface IValueConverter {
toBuffer: (value: T) => Buffer
fromBuffer: (value: Buffer) => T
}
class DiskCacheView {
constructor(
cache: DiskCache | DiskCacheWithCache
, keyConverter: IKeyConverter
, valueConverter: IValueConverter
)
has(key: K): boolean
get(key: K): V | undefined
getWithMetadata(key: K): {
value: V
updatedAt: number
timeToLive: number | null
} | undefined
set(
key: K
, value: V
/**
*
timeToLive > 0: items will expire after timeToLive milliseconds.
* timeToLive = 0: items will expire immediately.
* timeToLive = null: items will not expire.
*/
, timeToLive: number | null = null
): void
delete(key: K): void
clear(): void
keys(): IterableIterator
}
`$3
`ts
interface IKeyAsyncConverter {
toString: (value: T) => Awaitable
fromString: (value: string) => Awaitable
}interface IValueAsyncConverter {
toBuffer: (value: T) => Awaitable
fromBuffer: (value: Buffer) => Awaitable
}
class DiskCacheAsyncView {
constructor(
cache: DiskCache | DiskCacheWithCache
, keyConverter: IKeyAsyncConverter
, valueConverter: IValueAsyncConverter
)
has(key: K): Promise
get(key: K): Promise
getWithMetadata(key: K): Promise<{
value: V
updatedAt: number
timeToLive: number | null
} | undefined>
set(
key: K
, value: V
/**
*
timeToLive > 0: items will expire after timeToLive milliseconds.
* timeToLive = 0: items will expire immediately.
* timeToLive = null: items will not expire.
*/
, timeToLive: number | null = null
): Promise
delete(key: K): Promise
clear(): void
keys(): AsyncIterableIterator
}
`$3
#### PassthroughKeyConverter
`ts
class PassthroughKeyConverter implements IKeyConverter, IKeyAsyncConverter
`#### PassthroughValueConverter
`ts
class PassthroughValueConverter implements IValueConverter, IValueAsyncConverter
`#### JSONKeyConverter
`ts
class JSONKeyConverter implements IKeyConverter, IKeyAsyncConverter
`#### JSONValueConverter
`ts
class JSONValueConverter implements IValueConverter, IValueAsyncConverter {
constructor(encoding: BufferEncoding = 'utf-8')
}
`#### IndexKeyConverter
`ts
class IndexKeyConverter implements IKeyConverter, IKeyAsyncConverter {
constructor(radix: number = 10)
}
`#### MessagePackValueConverter
`ts
class MessagePackValueConverter implements IValueConverter, IValueAsyncConverter
`#### LZ4ValueConverter
`ts
class LZ4ValueConverter implements IValueConverter, IValueAsyncConverter {
constructor(valueConverter: IValueConverter)
}
`#### LZ4ValueAsyncConverter
`ts
class LZ4ValueAsyncConverter implements IValueAsyncConverter {
constructor(valueConverter: IValueConverter | IValueAsyncConverter) toBuffer(value: T): Promise
fromBuffer(value: Buffer): Promise
}
`#### ZstandardValueAsyncConverter
`ts
class ZstandardValueAsyncConverter implements IValueAsyncConverter {
constructor(
valueConverter: IValueConverter | IValueAsyncConverter
, level: number
) toBuffer(value: T): Promise
fromBuffer(value: Buffer): Promise
}
`#### PrefixKeyConverter
`ts
export class PrefixKeyConverter implements IKeyConverter, IKeyAsyncConverter {
constructor(
keyConverter: IKeyConverter
, prefix: string
) toString(value: T): string
fromString(value: string): T | undefined
}
`#### PrefixKeyAsyncConverter
`ts
class PrefixKeyAsyncConverter implements IKeyAsyncConverter {
constructor(
keyConverter: IKeyConverter | IKeyAsyncConverter
, prefix: string
) toString(value: T): Promise
fromString(value: string): Promise
}
``