Skip to content
This repository was archived by the owner on Apr 22, 2024. It is now read-only.

Commit d2c882f

Browse files
committed
chore: add driver
1 parent fdba5b1 commit d2c882f

File tree

3 files changed

+160
-0
lines changed

3 files changed

+160
-0
lines changed

index.js

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import Redis from 'redis-tag-cache';
2+
3+
export default function RedisCache (options) {
4+
const client = new Redis(options);
5+
6+
return {
7+
async invoke({ route, render, getTags }) {
8+
const key = `page:${ route }`;
9+
const cachedResponse = await client.get(key);
10+
11+
if (cachedResponse) {
12+
return cachedResponse;
13+
}
14+
15+
const content = await render();
16+
const tags = getTags();
17+
18+
if (!tags.length) {
19+
return content;
20+
}
21+
22+
// We could add "await" here, but saving content in cache doesn't have to block the request
23+
client.set(
24+
key,
25+
content,
26+
tags
27+
);
28+
29+
return content;
30+
},
31+
32+
invalidate({ tags }) {
33+
const clearAll = tags.includes('*');
34+
35+
if (!clearAll) {
36+
return client.invalidate(...tags)
37+
}
38+
39+
return new Promise((resolve, reject) => {
40+
const prefix = `${options.redis.keyPrefix || ''}tags:`;
41+
const stream = client.redis.scanStream({ match: `${prefix}*` });
42+
43+
const tags = [];
44+
45+
stream.on('data', rawTags => tags.push(...rawTags.map(tag => tag.replace(prefix, ''))));
46+
stream.on('end', async () => {
47+
if (tags.length) {
48+
await client.invalidate(...tags);
49+
}
50+
resolve();
51+
});
52+
stream.on('error', reject);
53+
});
54+
}
55+
};
56+
};

package.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name": "@vue-storefront/redis-cache",
3+
"version": "1.0.0",
4+
"description": "",
5+
"license": "MIT",
6+
"main": "index.js",
7+
"dependencies": {
8+
"redis-tag-cache": "^1.2.1"
9+
},
10+
"files": [
11+
"index.js"
12+
]
13+
}

yarn.lock

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2+
# yarn lockfile v1
3+
4+
5+
cluster-key-slot@^1.1.0:
6+
version "1.1.0"
7+
resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d"
8+
integrity sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==
9+
10+
debug@^4.3.1:
11+
version "4.3.3"
12+
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
13+
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
14+
dependencies:
15+
ms "2.1.2"
16+
17+
denque@^1.1.0:
18+
version "1.5.1"
19+
resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf"
20+
integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==
21+
22+
ioredis@^4.0.0:
23+
version "4.28.5"
24+
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f"
25+
integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==
26+
dependencies:
27+
cluster-key-slot "^1.1.0"
28+
debug "^4.3.1"
29+
denque "^1.1.0"
30+
lodash.defaults "^4.2.0"
31+
lodash.flatten "^4.4.0"
32+
lodash.isarguments "^3.1.0"
33+
p-map "^2.1.0"
34+
redis-commands "1.7.0"
35+
redis-errors "^1.2.0"
36+
redis-parser "^3.0.0"
37+
standard-as-callback "^2.1.0"
38+
39+
lodash.defaults@^4.2.0:
40+
version "4.2.0"
41+
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
42+
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
43+
44+
lodash.flatten@^4.4.0:
45+
version "4.4.0"
46+
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
47+
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
48+
49+
lodash.isarguments@^3.1.0:
50+
version "3.1.0"
51+
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
52+
integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=
53+
54+
ms@2.1.2:
55+
version "2.1.2"
56+
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
57+
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
58+
59+
p-map@^2.1.0:
60+
version "2.1.0"
61+
resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
62+
integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
63+
64+
redis-commands@1.7.0:
65+
version "1.7.0"
66+
resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89"
67+
integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==
68+
69+
redis-errors@^1.0.0, redis-errors@^1.2.0:
70+
version "1.2.0"
71+
resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad"
72+
integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=
73+
74+
redis-parser@^3.0.0:
75+
version "3.0.0"
76+
resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4"
77+
integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=
78+
dependencies:
79+
redis-errors "^1.0.0"
80+
81+
redis-tag-cache@^1.2.1:
82+
version "1.2.1"
83+
resolved "https://registry.yarnpkg.com/redis-tag-cache/-/redis-tag-cache-1.2.1.tgz#07d6e1f945d9d5c8186602129cb10573167d7534"
84+
integrity sha512-0F+rLtoIkz4NOWGt9k3qaPcbpvr6+wcEC9aWV78newMKTRN/nIYHgvfyO1Q0ySEepiEYbqj9DhjvQ4CUAtT9/g==
85+
dependencies:
86+
ioredis "^4.0.0"
87+
88+
standard-as-callback@^2.1.0:
89+
version "2.1.0"
90+
resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45"
91+
integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==

0 commit comments

Comments
 (0)