Merged in fix/redis-delete (pull request #3271)
feat(redis): include git hash when deleting without fuzzy * feat(redis): include git hash when deleting without fuzzy * Refactor Approved-by: Joakim Jäderberg
This commit is contained in:
@@ -49,7 +49,7 @@ export async function POST() {
|
|||||||
revalidateManuallyLogger.info(`Tag: ${tag}`)
|
revalidateManuallyLogger.info(`Tag: ${tag}`)
|
||||||
|
|
||||||
revalidateTag(tag)
|
revalidateTag(tag)
|
||||||
cacheClient.deleteKey(tag, { fuzzy: false })
|
cacheClient.deleteKey(tag, { fuzzy: false, includeGitHashInKey: true })
|
||||||
|
|
||||||
return Response.json({ revalidated: true, now: Date.now() })
|
return Response.json({ revalidated: true, now: Date.now() })
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -98,7 +98,10 @@ export type DataCache = {
|
|||||||
* @param fuzzy If true, does a wildcard delete. *key*
|
* @param fuzzy If true, does a wildcard delete. *key*
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
deleteKey: (key: string, opts?: { fuzzy?: boolean }) => Promise<void>
|
deleteKey: (
|
||||||
|
key: string,
|
||||||
|
opts?: { fuzzy?: boolean; includeGitHashInKey?: boolean }
|
||||||
|
) => Promise<void>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes a key from the cache
|
* Deletes a key from the cache
|
||||||
@@ -106,5 +109,8 @@ export type DataCache = {
|
|||||||
* @param fuzzy If true, does a wildcard delete. *key*
|
* @param fuzzy If true, does a wildcard delete. *key*
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
deleteKeys: (keys: string[], opts?: { fuzzy?: boolean }) => Promise<void>
|
deleteKeys: (
|
||||||
|
keys: string[],
|
||||||
|
opts?: { fuzzy?: boolean; includeGitHashInKey?: boolean }
|
||||||
|
) => Promise<void>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,24 @@ import { env } from "../../env/server"
|
|||||||
import { safeTry } from "../../utils/safeTry"
|
import { safeTry } from "../../utils/safeTry"
|
||||||
import { cacheLogger } from "../logger"
|
import { cacheLogger } from "../logger"
|
||||||
import { getCacheEndpoint } from "./endpoints"
|
import { getCacheEndpoint } from "./endpoints"
|
||||||
|
import { generateCacheKey } from "./generateCacheKey"
|
||||||
|
|
||||||
const API_KEY = env.REDIS_API_KEY ?? ""
|
const API_KEY = env.REDIS_API_KEY ?? ""
|
||||||
export async function deleteKey(key: string, opts?: { fuzzy?: boolean }) {
|
export async function deleteKey(
|
||||||
|
key: string,
|
||||||
|
opts?: { fuzzy?: boolean; includeGitHashInKey?: boolean }
|
||||||
|
) {
|
||||||
const perf = performance.now()
|
const perf = performance.now()
|
||||||
const endpoint = getCacheEndpoint(key)
|
|
||||||
|
let cacheKey: string | undefined = key
|
||||||
|
|
||||||
|
if (opts?.includeGitHashInKey) {
|
||||||
|
cacheKey = generateCacheKey(key, {
|
||||||
|
includeGitHashInKey: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const endpoint = getCacheEndpoint(cacheKey)
|
||||||
|
|
||||||
if (opts?.fuzzy) {
|
if (opts?.fuzzy) {
|
||||||
endpoint.searchParams.set("fuzzy", "true")
|
endpoint.searchParams.set("fuzzy", "true")
|
||||||
@@ -29,7 +42,7 @@ export async function deleteKey(key: string, opts?: { fuzzy?: boolean }) {
|
|||||||
if (response?.status !== 404) {
|
if (response?.status !== 404) {
|
||||||
Sentry.captureException(error ?? new Error("Unable to DELETE cachekey"), {
|
Sentry.captureException(error ?? new Error("Unable to DELETE cachekey"), {
|
||||||
extra: {
|
extra: {
|
||||||
cacheKey: key,
|
cacheKey: cacheKey,
|
||||||
statusCode: response?.status,
|
statusCode: response?.status,
|
||||||
statusText: response?.statusText,
|
statusText: response?.statusText,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -4,12 +4,25 @@ import { env } from "../../env/server"
|
|||||||
import { safeTry } from "../../utils/safeTry"
|
import { safeTry } from "../../utils/safeTry"
|
||||||
import { cacheLogger } from "../logger"
|
import { cacheLogger } from "../logger"
|
||||||
import { getDeleteMultipleKeysEndpoint } from "./endpoints"
|
import { getDeleteMultipleKeysEndpoint } from "./endpoints"
|
||||||
|
import { generateCacheKey } from "./generateCacheKey"
|
||||||
|
|
||||||
const API_KEY = env.REDIS_API_KEY ?? ""
|
const API_KEY = env.REDIS_API_KEY ?? ""
|
||||||
export async function deleteKeys(keys: string[], opts?: { fuzzy?: boolean }) {
|
export async function deleteKeys(
|
||||||
|
keys: string[],
|
||||||
|
opts?: { fuzzy?: boolean; includeGitHashInKey?: boolean }
|
||||||
|
) {
|
||||||
const perf = performance.now()
|
const perf = performance.now()
|
||||||
const endpoint = getDeleteMultipleKeysEndpoint()
|
const endpoint = getDeleteMultipleKeysEndpoint()
|
||||||
|
|
||||||
|
let cacheKeys: string[] = keys
|
||||||
|
if (opts?.includeGitHashInKey) {
|
||||||
|
cacheKeys = keys.map((key) =>
|
||||||
|
generateCacheKey(key, {
|
||||||
|
includeGitHashInKey: true,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
const [response, error] = await safeTry(
|
const [response, error] = await safeTry(
|
||||||
fetch(endpoint, {
|
fetch(endpoint, {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
@@ -18,7 +31,7 @@ export async function deleteKeys(keys: string[], opts?: { fuzzy?: boolean }) {
|
|||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"x-api-key": API_KEY,
|
"x-api-key": API_KEY,
|
||||||
},
|
},
|
||||||
body: JSON.stringify({ keys, fuzzy: opts?.fuzzy ?? false }),
|
body: JSON.stringify({ keys: cacheKeys, fuzzy: opts?.fuzzy ?? false }),
|
||||||
signal: AbortSignal.timeout(10_000),
|
signal: AbortSignal.timeout(10_000),
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user