@zenweb/cache 4.2.1 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.3.0] - 2023-12-14
4
+ normalKey 改名为 cacheKey
5
+ retryCount 参数说明,并修改默认值为 10
6
+
7
+ ## [4.2.2] - 2023-8-23
8
+ 修改: 除了 Buffer 类型意外全部都使用 JSON 序列化
9
+
3
10
  ## [4.2.1] - 2023-8-23
4
11
  fix: 内容未压缩,客户端支持压缩内容时却标识为压缩内容
5
12
 
package/dist/cache.d.ts CHANGED
@@ -34,10 +34,10 @@ export declare class Cache {
34
34
  /**
35
35
  * 缓存对象
36
36
  * @param key 缓存key
37
- * @param value 缓存值,对象会经过 JSON 序列化
37
+ * @param value 缓存值,除了 `Buffer` 以外的值会经过 JSON 序列化
38
38
  * @param ttlopt 缓存有效时长 (秒),不设置取默认设置 | 缓存选项
39
39
  */
40
- set(key: string, value: object | number | string | Buffer, ttlopt?: number | SetOption): Promise<SetResult>;
40
+ set(key: string, value: any, ttlopt?: number | SetOption): Promise<SetResult>;
41
41
  /**
42
42
  * 直接取得缓存
43
43
  */
@@ -46,7 +46,7 @@ export declare class Cache {
46
46
  * 取得缓存对象
47
47
  * @param key 缓存key
48
48
  */
49
- get<T>(key: string, opt: {
49
+ get(key: string, opt: {
50
50
  parse: false;
51
51
  } & GetOption): Promise<CacheResult | undefined>;
52
52
  get<T = unknown>(key: string, opt?: {
@@ -59,10 +59,10 @@ export declare class Cache {
59
59
  * @param key 缓存KEY
60
60
  * @param fetch 缓存设置方法回调
61
61
  */
62
- lockGet<T extends {} | string>(key: string, fetch: () => Promise<T> | T, _opt: {
62
+ lockGet<T = unknown>(key: string, fetch: () => Promise<T> | T, _opt: {
63
63
  parse: false;
64
64
  } & LockGetOption): Promise<CacheResult>;
65
- lockGet<T extends {} | string>(key: string, fetch: () => Promise<T> | T, _opt?: {
65
+ lockGet<T = unknown>(key: string, fetch: () => Promise<T> | T, _opt?: {
66
66
  parse?: true;
67
67
  } & LockGetOption): Promise<T>;
68
68
  /**
package/dist/cache.js CHANGED
@@ -54,13 +54,13 @@ class Cache {
54
54
  /**
55
55
  * 缓存对象
56
56
  * @param key 缓存key
57
- * @param value 缓存值,对象会经过 JSON 序列化
57
+ * @param value 缓存值,除了 `Buffer` 以外的值会经过 JSON 序列化
58
58
  * @param ttlopt 缓存有效时长 (秒),不设置取默认设置 | 缓存选项
59
59
  */
60
60
  async set(key, value, ttlopt) {
61
61
  var _a;
62
62
  let compressed;
63
- let data = Buffer.isBuffer(value) ? value : typeof value === 'object' ? JSON.stringify(value) : String(value);
63
+ let data = Buffer.isBuffer(value) ? value : JSON.stringify(value);
64
64
  const opt = Object.assign({
65
65
  ttl: 60,
66
66
  compressMinLength: 1024,
@@ -138,7 +138,7 @@ class Cache {
138
138
  // 使用锁设置缓存
139
139
  let locker;
140
140
  let refresh = opt.refresh || false; // 强制刷新
141
- let retryCount = typeof opt.retryCount === 'number' ? opt.retryCount : 100;
141
+ let retryCount = typeof opt.retryCount === 'number' ? opt.retryCount : 10;
142
142
  while (true) {
143
143
  if (!refresh) {
144
144
  // 尝试从 redis 中获取
@@ -19,14 +19,15 @@ function cached(key, opt) {
19
19
  const decompress = ctx.acceptsEncodings('gzip') === false;
20
20
  const _opt = Object.assign({
21
21
  type: 'json'
22
- }, opt, {
22
+ }, opt);
23
+ const result = await ctx.core.cache2.lockGet(_key, async function () {
24
+ await next();
25
+ return Buffer.isBuffer(ctx.body) ? ctx.body : Buffer.from(ctx.body);
26
+ }, {
27
+ ..._opt,
23
28
  parse: false,
24
29
  decompress,
25
30
  });
26
- const result = await ctx.core.cache2.lockGet(_key, async function () {
27
- await next();
28
- return ctx.body;
29
- }, _opt);
30
31
  if (result.compressed) {
31
32
  ctx.set('Content-Encoding', 'gzip');
32
33
  }
package/dist/types.d.ts CHANGED
@@ -89,7 +89,9 @@ export interface LockOption {
89
89
  lockTimeout?: number;
90
90
  /**
91
91
  * 锁获取失败重试次数
92
- * @default 100
92
+ * - 0 不进行重试
93
+ * - lockGet 默认为 10
94
+ * - singleRunner 默认为 0
93
95
  */
94
96
  retryCount?: number;
95
97
  /**
package/dist/utils.d.ts CHANGED
@@ -21,4 +21,4 @@ export declare function runRedisScript(redis: Redis, hash: string, script: strin
21
21
  * 生成一个参数缓存key
22
22
  * - 多个元素用 : 连接
23
23
  */
24
- export declare function normalKey(...key: (string | number | object)[]): string;
24
+ export declare function cacheKey(...key: (string | number | object)[]): string;
package/dist/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalKey = exports.runRedisScript = exports.sleep = exports.debug = void 0;
3
+ exports.cacheKey = exports.runRedisScript = exports.sleep = exports.debug = void 0;
4
4
  const debug_1 = require("debug");
5
5
  const crypto = require("crypto");
6
6
  exports.debug = (0, debug_1.default)('zenweb:cache');
@@ -69,11 +69,11 @@ function plainifyOrHash(obj) {
69
69
  * 生成一个参数缓存key
70
70
  * - 多个元素用 : 连接
71
71
  */
72
- function normalKey(...key) {
72
+ function cacheKey(...key) {
73
73
  return key.map(i => {
74
74
  if (typeof i === 'string')
75
75
  return i;
76
76
  return plainifyOrHash(i);
77
77
  }).join(':');
78
78
  }
79
- exports.normalKey = normalKey;
79
+ exports.cacheKey = cacheKey;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenweb/cache",
3
- "version": "4.2.1",
3
+ "version": "4.3.0",
4
4
  "description": "Zenweb Cache module",
5
5
  "exports": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",