on GitHub" data-tooltip-id=":R1blcldb:">v2.5.1·Edited Oct 16·
In this guide, you’ll learn how to create a Cache Module.
Start by creating a new directory for your module. For example, src/modules/my-cache
.
Create the file src/modules/my-cache/service.ts
that holds the implementation of the cache service.
The Cache Module's main service must implement the ICacheService
interface imported from @medusajs/framework/types
:
1import { ICacheService } from "@medusajs/framework/types"2 3class MyCacheService implements ICacheService {4 get<T>(key: string): Promise<T> {5 throw new Error("Method not implemented.")6 }7 set(key: string, data: unknown, ttl?: number): Promise<void> {8 throw new Error("Method not implemented.")9 }10 invalidate(key: string): Promise<void> {11 throw new Error("Method not implemented.")12 }13}14 15export default MyCacheService
The service implements the required methods based on the desired caching mechanism.
The get
method retrieves the value of a cached item based on its key.
The method accepts a string as a first parameter, which is the key in the cache. It either returns the cached item or null
if it doesn’t exist.
For example, to implement this method using Memcached:
1class MyCacheService implements ICacheService {2 // ...3 async get<T>(cacheKey: string): Promise<T | null> {4 return new Promise((res, rej) => {5 this.memcached.get(cacheKey, (err, data) => {6 if (err) {7 res(null)8 } else {9 if (data) {10 res(JSON.parse(data))11 } else {12 res(null)13 }14 }15 })16 })17 }18}
The set
method is used to set an item in the cache. It accepts three parameters:
For example, to implement this method using Memcached:
1class MyCacheService implements ICacheService {2 protected TTL = 603 // ...4 async set(5 key: string,6 data: Record<string, unknown>,7 ttl: number = this.TTL // or any value8 ): Promise<void> {9 return new Promise((res, rej) =>10 this.memcached.set(11 key, JSON.stringify(data), ttl, (err) => {12 if (err) {13 rej(err)14 } else {15 res()16 }17 })18 )19 }20}
The invalidate
method removes an item from the cache using its key.
By default, items are removed from the cache when their time-to-live (ttl) expires. The invalidate
method can be used to remove the item beforehand.
The method accepts a string as a first parameter, which is the key of the item to invalidate and remove from the cache.
For example, to implement this method using Memcached:
Create the file src/modules/my-cache/index.ts
with the following content:
This exports the module's definition, indicating that the MyCacheService
is the main service of the module.
To use your Cache Module, add it to the modules
object exported as part of the configurations in medusa-config.ts
. A Cache Module is added under the cacheService
key.
For example: