diff --git a/__tests__/cache-restore.test.ts b/__tests__/cache-restore.test.ts
index 27f6fa27..a1518363 100644
--- a/__tests__/cache-restore.test.ts
+++ b/__tests__/cache-restore.test.ts
@@ -108,7 +108,7 @@ describe('cache-restore', () => {
     it.each([['npm7'], ['npm6'], ['pnpm6'], ['yarn1'], ['yarn2'], ['random']])(
       'Throw an error because %s is not supported',
       async packageManager => {
-        await expect(restoreCache(packageManager)).rejects.toThrowError(
+        await expect(restoreCache('v16.17.1', packageManager)).rejects.toThrowError(
           `Caching for '${packageManager}' is not supported`
         );
       }
@@ -132,10 +132,10 @@ describe('cache-restore', () => {
           }
         });
 
-        await restoreCache(packageManager);
+        await restoreCache('v16.17.1', packageManager);
         expect(hashFilesSpy).toHaveBeenCalled();
         expect(infoSpy).toHaveBeenCalledWith(
-          `Cache restored from key: node-cache-${platform}-${packageManager}-${fileHash}`
+          `Cache restored from key: node-cache-v16-${platform}-${packageManager}-${fileHash}`
         );
         expect(infoSpy).not.toHaveBeenCalledWith(
           `${packageManager} cache is not found`
@@ -163,7 +163,7 @@ describe('cache-restore', () => {
         });
 
         restoreCacheSpy.mockImplementationOnce(() => undefined);
-        await restoreCache(packageManager);
+        await restoreCache('v16.17.1', packageManager);
         expect(hashFilesSpy).toHaveBeenCalled();
         expect(infoSpy).toHaveBeenCalledWith(
           `${packageManager} cache is not found`
diff --git a/src/cache-restore.ts b/src/cache-restore.ts
index d49b27fc..41cee761 100644
--- a/src/cache-restore.ts
+++ b/src/cache-restore.ts
@@ -12,6 +12,7 @@ import {
 } from './cache-utils';
 
 export const restoreCache = async (
+  nodeVersion: string,
   packageManager: string,
   cacheDependencyPath?: string
 ) => {
@@ -36,7 +37,8 @@ export const restoreCache = async (
     );
   }
 
-  const primaryKey = `node-cache-${platform}-${packageManager}-${fileHash}`;
+  const nodeMajor = nodeVersion.split('.')[0];
+  const primaryKey = `node-cache-${nodeMajor}-${platform}-${packageManager}-${fileHash}`;
   core.debug(`primary key is ${primaryKey}`);
 
   core.saveState(State.CachePrimaryKey, primaryKey);
diff --git a/src/main.ts b/src/main.ts
index d43614e6..3ad11038 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -40,14 +40,16 @@ export async function run() {
       await installer.getNode(version, stable, checkLatest, auth, arch);
     }
 
+    let installedVersion = version
     // Output version of node is being used
     try {
-      const {stdout: installedVersion} = await exec.getExecOutput(
+      const {stdout} = await exec.getExecOutput(
         'node',
         ['--version'],
         {ignoreReturnCode: true, silent: true}
       );
-      core.setOutput('node-version', installedVersion.trim());
+      installedVersion = stdout.trim();
+      core.setOutput('node-version', installedVersion);
     } catch (err) {
       core.setOutput('node-version', '');
     }
@@ -60,7 +62,7 @@ export async function run() {
 
     if (cache && isCacheFeatureAvailable()) {
       const cacheDependencyPath = core.getInput('cache-dependency-path');
-      await restoreCache(cache, cacheDependencyPath);
+      await restoreCache(cache, cacheDependencyPath, installedVersion);
     }
 
     const matchersPath = path.join(__dirname, '../..', '.github');