From bc21e05570085e0f5703cdff185dab0c2c5c1786 Mon Sep 17 00:00:00 2001 From: Christoph Tupi Date: Mon, 17 Aug 2026 12:10:30 +0200 Subject: [PATCH 1/2] perf(memory): remove unused timeout since reads are synchronous --- server/src/services/memory/provider.ts | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/server/src/services/memory/provider.ts b/server/src/services/memory/provider.ts index 5ee73ee..28a5cac 100644 --- a/server/src/services/memory/provider.ts +++ b/server/src/services/memory/provider.ts @@ -1,13 +1,11 @@ import type { Core } from '@strapi/strapi'; import { LRUCache } from 'lru-cache'; -import { withTimeout } from '../../utils/withTimeout'; import { CacheProvider, CacheService } from '../../types/cache.types'; import { loggy } from '../../utils/log'; export class InMemoryCacheProvider implements CacheProvider { private initialized = false; private provider!: LRUCache; - private cacheGetTimeoutInMs: number; constructor(private strapi: Core.Strapi) {} @@ -31,10 +29,6 @@ export class InMemoryCacheProvider implements CacheProvider { allowStale, }); - this.cacheGetTimeoutInMs = Number( - this.strapi.plugin('strapi-cache').config('cacheGetTimeoutInMs') - ); - loggy.info('Provider initialized'); } @@ -50,16 +44,12 @@ export class InMemoryCacheProvider implements CacheProvider { async get(key: string): Promise { if (!this.ready) return null; - return withTimeout( - () => - new Promise((resolve) => { - resolve(this.provider.get(key)); - }), - this.cacheGetTimeoutInMs - ).catch((error) => { + try { + return this.provider.get(key); + } catch (error) { loggy.error(`Error during get: ${error?.message || error}`); return null; - }); + } } async set(key: string, val: any): Promise { From 8d6b375604165791727865b9d0e94e2c4da13c22 Mon Sep 17 00:00:00 2001 From: Christoph Tupi Date: Mon, 17 Aug 2026 12:12:41 +0200 Subject: [PATCH 2/2] chore: update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 68dc05f..6b311ca 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ Full configuration example: cacheHeadersDenyList: ['access-control-allow-origin', 'content-encoding'], // Headers to exclude from the cache (must be lowercase, if empty array, no headers are excluded, cacheHeaders must be true) cacheHeadersAllowList: ['content-type', 'content-security-policy'], // Headers to include in the cache (must be lowercase, if empty array, all headers are cached, cacheHeaders must be true) cacheAuthorizedRequests: false, // Cache requests with authorization headers (set to true if you want to cache authorized requests) - cacheGetTimeoutInMs: 1000, // Timeout for getting cached data in milliseconds (default is 1 second) + cacheGetTimeoutInMs: 1000, // Timeout for getting cached data in milliseconds (default is 1 second, redis only) autoPurgeCache: true, // Automatically purge cache on content CRUD operations autoPurgeGraphQL: true, // Automatically purge GraphQL cache on content CRUD operations autoPurgeCacheOnStart: true, // Automatically purge cache on Strapi startup @@ -118,7 +118,7 @@ Possible configuration keys are listed below; omitted keys keep the plugin defau | `cacheHeadersDenyList` | Header names (lowercase) to strip when `cacheHeaders` is `true` | Array of strings (default: `[]`) | | `cacheHeadersAllowList` | If non-empty, only these header names (lowercase) are stored; if empty, all headers are stored (subject to deny list) | Array of strings (default: `[]`) | | `cacheAuthorizedRequests` | Whether to cache requests that include an `Authorization` header | `true` or `false` (default: `false`) | -| `cacheGetTimeoutInMs` | Max time to wait for a cache read before treating it as a miss | Milliseconds (default: `1000`) | +| `cacheGetTimeoutInMs` | Max time to wait for a cache read before treating it as a miss (redis only) | Milliseconds (default: `1000`) | | `autoPurgeCache` | Invalidate relevant REST cache entries after content create/update/delete | `true` or `false` (default: `true`) | | `autoPurgeGraphQL` | Invalidate GraphQL cache after content create/update/delete | `true` or `false` (default: `false` if omitted; set `true` to enable) | | `autoPurgeCacheOnStart` | Clear the cache when Strapi starts | `true` or `false` (default: `true`) |