@cvo/plugin-cache
v0.0.0
Published
Cache plugin for CVO Framework
Readme
@cvo/plugin-cache
High-performance caching plugin for CVO Framework. Improve application responsiveness by caching frequently accessed data with simple decorators or programmatic API.
🚀 Features
- Memory Storage: Built-in native in-memory provider with expiration support.
- Decorator Support: Use
@Cacheableto automatically cache method results based on arguments. - Extensible Architecture: Implement custom providers (e.g., Redis) by implementing the
CacheProviderinterface. - TTL Support: Precise Time-To-Live management for cached items.
🛠 Configuration
Register the plugin in your cvo.config.ts:
import { defineConfig } from '@cvo/core';
import { CachePlugin, MemoryCacheProvider } from '@cvo/plugin-cache';
export default defineConfig({
plugins: [
new CachePlugin(new MemoryCacheProvider())
]
});🧠 Usage
Declarative Caching (@Cacheable)
Automatically caches the result of a method. The cache key is generated based on the class name, method name, and arguments.
import { Cacheable } from '@cvo/plugin-cache';
class ProductService {
@Cacheable({ ttl: 3600 }) // Cache for 1 hour (TTL is in seconds)
async getProduct(id: string) {
// Expensive database operation
return await db.products.findUnique({ where: { id } });
}
}Programmatic Access
Access the cache provider directly via the useCache hook.
import { useCache } from '@cvo/server';
export async function clearUserCache(userId: string) {
const cache = useCache();
await cache.delete(`user:profile:${userId}`);
}🔌 Custom Providers
To implement a custom provider (e.g., for Redis):
import { CacheProvider } from '@cvo/plugin-cache';
export class RedisCacheProvider implements CacheProvider {
async get<T>(key: string): Promise<T | null> { /* ... */ }
async set(key: string, value: any, ttl?: number): Promise<void> { /* ... */ }
async delete(key: string): Promise<void> { /* ... */ }
async clear(): Promise<void> { /* ... */ }
}