Skip to content
Discordjs-NextgenPublic

About

A flexible, high-performance, and production-ready caching system designed specifically for the discordjs-nextgen framework.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

discordjs-nextgen-cache

Turkish Documentation (Türkçe Dökümantasyon)

A flexible, high-performance, and production-ready caching system designed specifically for the discordjs-nextgen framework.

🚀 Features

  • Adapter-Based Architecture: Seamlessly switch between Memory (default) and Redis.
  • Framework Agnostic: While optimized for discordjs-nextgen, the core logic remains decoupled.
  • Pluggable System: Easy integration using the CachePlugin.
  • Intelligent Namespacing: Built-in support for user, guild, and channels namespaces to prevent key collisions.
  • Smart wrap Method: Automatically fetch, cache, and return data in a single call.
  • Dynamic Imports: Redis dependencies are only loaded if you use the RedisAdapter.
  • Full TypeScript Support: Module augmentation for App and Context types.

📦 Installation

npm install discordjs-nextgen-cache

If you plan to use Redis:

npm install ioredis

🛠️ Setup

Basic (Memory)

import { App } from 'discordjs-nextgen';
import { CachePlugin, MemoryAdapter } from 'discordjs-nextgen-cache';

const app = new App();

// Explicitly using MemoryAdapter
app.use(new CachePlugin({
  adapter: new MemoryAdapter()
}));

app.run('TOKEN');

Advanced (Redis)

import { App } from 'discordjs-nextgen';
import { CachePlugin, RedisAdapter } from 'discordjs-nextgen-cache';

const app = new App();

app.use(new CachePlugin({
  adapter: new RedisAdapter({
    host: 'localhost',
    port: 6379,
    password: 'your_password'
  })
}));

app.run('TOKEN');

💡 Usage

Once the plugin is installed, you can access the cache via app.cache or ctx.cache (inside commands/events).

Basic Operations

// Set value with 1 minute TTL (milisec)
await ctx.cache.set('my_key', { hello: 'world' }, 60000);

// Get value
const data = await ctx.cache.get('my_key');

// Delete value
await ctx.cache.delete('my_key');

// Clear all cache
await ctx.cache.clear();

Namespaces (Recommended)

Namespaces automatically prefix your keys (e.g., user:ID) to keep your cache organized.

// User namespace
await ctx.cache.user.set(ctx.user.id, { coins: 100 });
const coins = await ctx.cache.user.get(ctx.user.id);

// Guild namespace
await ctx.cache.guild.set(ctx.guild.id, { settings: true });

// Channels namespace
await ctx.cache.channels.get(channelId);

The wrap Method

The wrap method is the most efficient way to handle "Cache-Aside" logic. It checks the cache first; if the data is missing, it executes your function, stores the result, and returns it.

const profile = await ctx.cache.wrap(`profile:${userId}`, async () => {
  // This function only runs if cache is empty
  return await db.users.findUnique({ where: { id: userId } });
}, 300000); // Cache for 5 minutes

🏗️ Architecture

  • core/Cache: The main logic handler.
  • adapters/: Contains MemoryAdapter and RedisAdapter.
  • CachePlugin: Injects the cache instance into the discordjs-nextgen lifecycle.

📄 License

Apache-2.0

About

A flexible, high-performance, and production-ready caching system designed specifically for the discordjs-nextgen framework.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages