perf: use LRU cache for getServerSession (#8339)
* chore: add lru package * feat: use LRU cache * fix: type * Updates package json --------- Co-authored-by: zomars <zomars@me.com>pull/8360/head
parent
597b14cf4c
commit
f467bb7957
|
@ -1,3 +1,4 @@
|
||||||
|
import { LRUCache } from "lru-cache";
|
||||||
import type { GetServerSidePropsContext, NextApiRequest, NextApiResponse } from "next";
|
import type { GetServerSidePropsContext, NextApiRequest, NextApiResponse } from "next";
|
||||||
import type { AuthOptions, Session } from "next-auth";
|
import type { AuthOptions, Session } from "next-auth";
|
||||||
import { getToken } from "next-auth/jwt";
|
import { getToken } from "next-auth/jwt";
|
||||||
|
@ -9,13 +10,8 @@ import prisma from "@calcom/prisma";
|
||||||
/**
|
/**
|
||||||
* Stores the session in memory using the stringified token as the key.
|
* Stores the session in memory using the stringified token as the key.
|
||||||
*
|
*
|
||||||
* This is fine for production as each lambda will be recycled before this
|
|
||||||
* becomes large enough to cause issues.
|
|
||||||
*
|
|
||||||
* If we want to get extra spicy we could store this in edge config or similar
|
|
||||||
* so we can TTL things and benefit from faster retrievals than prisma.
|
|
||||||
*/
|
*/
|
||||||
const UNSTABLE_SESSION_CACHE = new Map<string, Session>();
|
const CACHE = new LRUCache<string, Session>({ max: 1000 });
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a slimmed down version of the `getServerSession` function from
|
* This is a slimmed down version of the `getServerSession` function from
|
||||||
|
@ -44,7 +40,7 @@ export async function getServerSession(options: {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cachedSession = UNSTABLE_SESSION_CACHE.get(JSON.stringify(token));
|
const cachedSession = CACHE.get(JSON.stringify(token));
|
||||||
|
|
||||||
if (cachedSession) {
|
if (cachedSession) {
|
||||||
return cachedSession;
|
return cachedSession;
|
||||||
|
@ -79,7 +75,7 @@ export async function getServerSession(options: {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
UNSTABLE_SESSION_CACHE.set(JSON.stringify(token), session);
|
CACHE.set(JSON.stringify(token), session);
|
||||||
|
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^2.4.3",
|
||||||
"handlebars": "^4.7.7",
|
"handlebars": "^4.7.7",
|
||||||
"jose": "^4.13.1",
|
"jose": "^4.13.1",
|
||||||
|
"lru-cache": "^9.0.3",
|
||||||
"next-auth": "^4.20.1",
|
"next-auth": "^4.20.1",
|
||||||
"nodemailer": "^6.7.8",
|
"nodemailer": "^6.7.8",
|
||||||
"otplib": "^12.0.1"
|
"otplib": "^12.0.1"
|
||||||
|
|
|
@ -4332,6 +4332,7 @@ __metadata:
|
||||||
bcryptjs: ^2.4.3
|
bcryptjs: ^2.4.3
|
||||||
handlebars: ^4.7.7
|
handlebars: ^4.7.7
|
||||||
jose: ^4.13.1
|
jose: ^4.13.1
|
||||||
|
lru-cache: ^9.0.3
|
||||||
next-auth: ^4.20.1
|
next-auth: ^4.20.1
|
||||||
nodemailer: ^6.7.8
|
nodemailer: ^6.7.8
|
||||||
otplib: ^12.0.1
|
otplib: ^12.0.1
|
||||||
|
@ -27369,6 +27370,13 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"lru-cache@npm:^9.0.3":
|
||||||
|
version: 9.0.3
|
||||||
|
resolution: "lru-cache@npm:9.0.3"
|
||||||
|
checksum: 218415714d44c113bc3a8d12ceca6dedf310915aa861f9e0df13df1fe6db9833e1b5f1f656e9a117ac82677ad3e499be23bff2f670f2a7c5c186d64a92596b68
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"lru-cache@npm:~4.0.0":
|
"lru-cache@npm:~4.0.0":
|
||||||
version: 4.0.2
|
version: 4.0.2
|
||||||
resolution: "lru-cache@npm:4.0.2"
|
resolution: "lru-cache@npm:4.0.2"
|
||||||
|
|
Loading…
Reference in New Issue