New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

smart-cache-nestjs

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

smart-cache-nestjs

Minimal Redis caching for NestJS. Reduced to the smallest possible code.

latest
Source
npmnpm
Version
1.1.0
Version published
Maintainers
1
Created
Source

smart-cache-nestjs

Minimal Redis caching for NestJS v10/v11. Reduced to the smallest possible code.

Author: Nurul Islam Rimon
GitHub: https://github.com/nurulislamrimon/smart-cache-nestjs

Install

npm install smart-cache-nestjs ioredis

Quick Setup

// app.module.ts
import { SmartCacheModule } from 'smart-cache-nestjs';

@Module({
  imports: [
    SmartCacheModule.forRoot({ 
      url: 'redis://localhost:6379' 
    }),
  ],
})
export class AppModule {}

Usage

// Inject and use
@Injectable()
class UserService {
  constructor(private cache: SmartCache) {}

  async findAll() {
    return this.cache.remember('users', () => this.db.users.findMany());
  }

  async findById(id: number) {
    return this.cache.remember(`user:${id}`, () => this.db.users.find(id));
  }

  async create(data: any) {
    const user = await this.db.users.create(data);
    await this.cache.invalidate('users');  // Clear list cache
    return user;
  }
}

API

cache.remember(key, fn, ttl?)

The main method. Returns cached value or executes fn and caches result.

const users = await cache.remember('users', () => db.findAll(), 60);

cache.get(key), cache.set(key, value, ttl?)

Basic get/set operations.

await cache.set('key', data, 30);
const data = await cache.get('key');

cache.key(...)

Build cache keys with automatic prefix.

cache.key('users', { page: 1, limit: 10 })
// → "app:users:page=1:limit=10"

cache.invalidate(tag) / cache.del(key)

Invalidate by tag or key.

await cache.invalidate('users');
await cache.del('user:123');

cache.stats()

Get hit/miss stats.

const { hits, misses, hitRate } = cache.stats();

Decorators

class UserService {
  @Cache('users')
  async findAll() { return this.db.findAll(); }

  @Cache('user:{id}')
  async findById(id: number) { return this.db.find(id); }

  @Evict('users')
  async create(data: any) { return this.db.create(data); }

  @Evict({ tag: 'products' })
  async updateProduct() { ... }
}

Config

SmartCacheModule.forRoot({
  url: 'redis://localhost:6379',
  prefix: 'app',      // key prefix
  ttl: 60,           // default TTL in seconds
  memory: true,      // L1 memory cache
  memoryTTL: 5,      // L1 TTL in seconds
  memorySize: 500,  // L1 max entries
})

Async Config

SmartCacheModule.forRootAsync({
  useFactory: (config: ConfigService) => ({
    url: config.get('REDIS_URL'),
  }),
  inject: [ConfigService],
})

That's it. No boilerplate.

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for details.

License

MIT

Keywords

nestjs

FAQs

Package last updated on 29 Mar 2026

Related posts