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:
45
packages/common/dataCache/DistributedCache/deleteKeys.ts
Normal file
45
packages/common/dataCache/DistributedCache/deleteKeys.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import * as Sentry from "@sentry/nextjs"
|
||||
|
||||
import { env } from "../../env/server"
|
||||
import { safeTry } from "../../utils/safeTry"
|
||||
import { cacheLogger } from "../logger"
|
||||
import { getDeleteMultipleKeysEndpoint } from "./endpoints"
|
||||
|
||||
const API_KEY = env.REDIS_API_KEY ?? ""
|
||||
export async function deleteKeys(keys: string[], opts?: { fuzzy?: boolean }) {
|
||||
const perf = performance.now()
|
||||
const endpoint = getDeleteMultipleKeysEndpoint()
|
||||
|
||||
const [response, error] = await safeTry(
|
||||
fetch(endpoint, {
|
||||
method: "DELETE",
|
||||
cache: "no-cache",
|
||||
headers: {
|
||||
"x-api-key": API_KEY,
|
||||
},
|
||||
body: JSON.stringify({ keys, fuzzy: opts?.fuzzy ?? false }),
|
||||
signal: AbortSignal.timeout(10_000),
|
||||
})
|
||||
)
|
||||
|
||||
if (!response || !response.ok || error) {
|
||||
if (response?.status !== 404) {
|
||||
Sentry.captureException(
|
||||
error ?? new Error("Unable to DELETE cachekeys"),
|
||||
{
|
||||
extra: {
|
||||
cacheKeys: keys,
|
||||
statusCode: response?.status,
|
||||
statusText: response?.statusText,
|
||||
},
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
return undefined
|
||||
}
|
||||
|
||||
cacheLogger.debug(
|
||||
`Deleted '${keys.join(", ")}' took ${(performance.now() - perf).toFixed(2)}ms`
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user