@tyagoveras/cache-library
v1.1.0
Published
A simple caching library for TypeScript with decorators for method caching.
Readme
Cache Library
A simple caching library for TypeScript that provides a decorator for caching method results.
Installation
To install the cache library, use npm:
npm i @tyagoveras/cache-libraryUsage
Importing the Library
You can import the library in your TypeScript project as follows:
import { cacheInjectable, CacheInvalidate } from '@tyagoveras/cache-library';Using the Cache Decorator
You can use the cacheInjectable decorator to cache the results of class methods. Here’s an example:
class ExampleService {
@cacheInjectable({ cacheKey: 'exampleMethod', ttl: 5000 })
exampleMethod() {
console.log('Executing exampleMethod');
return 'result';
}
}Parameters
cacheKey: A unique key for the cached result.ttl: Time-to-live for the cached result in milliseconds.
Configuration file cache-config.json
The library uses a configuration file named cache-config.json to manage cache settings. The file should be placed in the root directory of your project.
{
"strategy": "node-cache | redis",
"connectionUrl": "redis://localhost:6379",
"defaultRootKey": "app",
"defaultTtl": 60000
}strategy: The caching strategy to use. Options arenode-cacheorredis.
cacheInjectable(options: { cacheKey: string; ttl: number })
This decorator can be applied to any class method to enable caching.
CacheInvalidate(options: CacheInvalidateOptions)
This decorator invalidates cache entries after the method executes successfully. Useful for clearing cache when data is updated or deleted.
Options
cacheKeys: Array of cache keys to invalidate (uses the same key format ascacheInjectable)patterns: Array of patterns to match multiple cache keys (supports wildcards with*)invalidateAll: Boolean to invalidate all cache entries with the default root key
Examples
class UserService {
@cacheInjectable({ cacheKey: 'getUser', ttl: 60000 })
async getUser(userId: string) {
console.log('Fetching user from database');
return { id: userId, name: 'John Doe' };
}
@CacheInvalidate({ cacheKeys: ['getUser'] })
async updateUser(userId: string, data: any) {
console.log('Updating user in database');
// Update logic here
return { id: userId, ...data };
}
@CacheInvalidate({ patterns: ['getUser*', 'listUsers*'] })
async deleteUser(userId: string) {
console.log('Deleting user from database');
// Delete logic here
}
@CacheInvalidate({ invalidateAll: true })
async resetAllUsers() {
console.log('Resetting all users');
// Reset logic here
}
}Contributing
Feel free to submit issues or pull requests to improve the library.
License
This project is licensed under the MIT License.
