Merged in feat/redis-fix (pull request #3207)

Feat/redis fix

* feat(redis): delete multiple keys in one partition scan

* fix(BOOK-603): make it possible to do multiple deletes in redis at once using one partition scan


Approved-by: Linus Flood
This commit is contained in:
Joakim Jäderberg
2025-11-24 10:17:35 +00:00
parent 29e81d9995
commit 8ed16a0119
11 changed files with 260 additions and 61 deletions

View File

@@ -97,44 +97,43 @@ export async function POST(request: NextRequest) {
const cacheClient = await getCacheClient()
const keysToDelete = []
const contentTypeUidTag = generateTag(entryLocale, content_type.uid)
revalidateLogger.debug(
`Revalidating tag by content_type_uid: ${contentTypeUidTag}`
)
revalidateTag(contentTypeUidTag)
await cacheClient.deleteKey(contentTypeUidTag, { fuzzy: true })
keysToDelete.push(contentTypeUidTag)
revalidateLogger.debug(`Revalidating refsTag: ${refsTag}`)
revalidateTag(refsTag)
await cacheClient.deleteKey(refsTag, { fuzzy: true })
keysToDelete.push(refsTag)
revalidateLogger.debug(`Revalidating refTag: ${refTag}`)
revalidateTag(refTag)
await cacheClient.deleteKey(refTag, { fuzzy: true })
keysToDelete.push(refTag)
revalidateLogger.debug(`Revalidating tag: ${tag}`)
revalidateTag(tag)
await cacheClient.deleteKey(tag, { fuzzy: true })
keysToDelete.push(tag)
revalidateLogger.debug(
`Revalidating language switcher tag: ${languageSwitcherTag}`
)
revalidateTag(languageSwitcherTag)
await cacheClient.deleteKey(languageSwitcherTag, { fuzzy: true })
keysToDelete.push(languageSwitcherTag)
revalidateLogger.debug(`Revalidating metadataTag: ${metadataTag}`)
revalidateTag(metadataTag)
await cacheClient.deleteKey(metadataTag, { fuzzy: true })
keysToDelete.push(metadataTag)
revalidateLogger.debug(`Revalidating contentEntryTag: ${contentEntryTag}`)
revalidateTag(contentEntryTag)
await cacheClient.deleteKey(contentEntryTag, { fuzzy: true })
keysToDelete.push(contentEntryTag)
if (entry.url) {
const resolveEntryTag = resolveEntryCacheKey(entryLocale, entry.url)
revalidateLogger.debug(`Revalidating url: ${resolveEntryTag}`)
await cacheClient.deleteKey(resolveEntryTag, { fuzzy: true })
keysToDelete.push(resolveEntryTag)
}
if (entry.breadcrumbs) {
@@ -153,11 +152,11 @@ export async function POST(request: NextRequest) {
`Revalidating breadcrumbsRefsTag: ${breadcrumbsRefsTag}`
)
revalidateTag(breadcrumbsRefsTag)
await cacheClient.deleteKey(breadcrumbsRefsTag, { fuzzy: true })
keysToDelete.push(breadcrumbsRefsTag)
revalidateLogger.debug(`Revalidating breadcrumbsTag: ${breadcrumbsTag}`)
revalidateTag(breadcrumbsTag)
await cacheClient.deleteKey(breadcrumbsTag, { fuzzy: true })
keysToDelete.push(breadcrumbsTag)
}
if (entry.page_settings) {
@@ -169,7 +168,7 @@ export async function POST(request: NextRequest) {
revalidateLogger.debug(`Revalidating pageSettingsTag: ${pageSettingsTag}`)
revalidateTag(pageSettingsTag)
await cacheClient.deleteKey(pageSettingsTag, { fuzzy: true })
keysToDelete.push(pageSettingsTag)
}
if (content_type.uid === "destination_city_page") {
@@ -180,10 +179,12 @@ export async function POST(request: NextRequest) {
"city_list_data",
cityIdentifier
)
await cacheClient.deleteKey(cityPageTag, { fuzzy: true })
keysToDelete.push(cityPageTag)
}
}
await cacheClient.deleteKeys(keysToDelete, { fuzzy: true })
return Response.json({ revalidated: true, now: Date.now() })
} catch (error) {
revalidateLogger.error("Failed to revalidate tag(s)", error)