This utility allows you to cache streams in memory, or Web Storage. It also works in Node, but please only use in-memory if you do so.
In the future, it will be extended with he ability provide a way to provide a custom CacheProviderType, such as Redis.
npm i cached-observable --save
The utility has the following interface:
function cachedObservable<T = unknown>(
observable$: Observable<T>,
key: string,
maxAge?: number | undefined,
cacheProviderType = CacheProviderType.Memory,
)
observable$
is the stream we want to cachekey
is a unique key - please make sure it is uniquemaxAge
is a value, in milliseconds, that represents the amount of time the value will be cached forcacheProviderType
is by default in-memory, you can also chooseCacheProviderType.Persistent
orCacheProviderType.Session
A basic example; the stream is cached in memory for the whole duration of the session.
import { cachedObservable } from 'cached-observable';
function getTodos() {
const request$ = this.http.get(url);
const key = url;
return cachedObservable(request$, key);
}
We can set a max-age - so that the entry will expire after the number of milliseconds provided
import { cachedObservable } from 'cached-observable';
function getTodos() {
const request$ = this.http.get(url);
const key = url;
const maxAge = 60_000; // 1 minute
return cachedObservable(request$, key, maxAge);
}
We can store the streams in both session and local storage:
import { cachedObservable, CacheProviderType } from 'cached-observable';
// local storage
function getTodos() {
const request$ = this.http.get(url);
return cachedObservable(request$, url, maxAge, CacheProviderType.Persistent);
}
// session storage
function getTodos() {
const request$ = this.http.get(url);
return cachedObservable(request$, url, maxAge, CacheProviderType.Session);
}
import { invalidateCachedObservable } from 'cached-observable';
invalidateCachedObservable(cacheKey, CacheProviderType.Session);