mm_redis 1.5.0 → 1.6.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.
Files changed (3) hide show
  1. package/README.md +83 -2
  2. package/index.js +50 -50
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -4,8 +4,8 @@ mm_redis是一个高效的Redis客户端封装库,提供了全面的Redis功
4
4
 
5
5
  ## 版本信息
6
6
 
7
- - **当前版本**: 1.6.0
8
- - **更新日期**: 2024-01-10
7
+ - **当前版本**: 1.7.0
8
+ - **更新日期**: 2024-10-07
9
9
  - **作者**: 邱文武
10
10
 
11
11
  ## 功能特性
@@ -18,6 +18,7 @@ mm_redis是一个高效的Redis客户端封装库,提供了全面的Redis功
18
18
  - 自动JSON序列化/反序列化
19
19
  - 键前缀管理,支持多业务隔离
20
20
  - 自动连接管理,无需手动维护连接状态
21
+ - 统一的事件系统,支持操作前后的事件监听
21
22
 
22
23
  ## 安装
23
24
 
@@ -194,6 +195,79 @@ $.log.debug(`[Redis] 消息已发布,${receivedCount}个客户端接收`);
194
195
  await redis.unsubscribe('notifications');
195
196
  ```
196
197
 
198
+ ### 事件系统
199
+
200
+ mm_redis提供了完善的事件系统,可以监听各种操作的前后事件,用于日志记录、数据修改或操作拦截。
201
+
202
+ ```javascript
203
+ // 监听设置操作前的事件
204
+ redis.on('set_before', (data) => {
205
+ $.log.debug('[Redis] 设置缓存前:', data);
206
+ // 可以修改data中的值
207
+ // data.value = JSON.stringify(data.value);
208
+ // 可以通过设置data.cancel = true来取消操作
209
+ });
210
+
211
+ // 监听设置操作后的事件
212
+ redis.on('set_after', (data) => {
213
+ $.log.debug('[Redis] 设置缓存后:', data);
214
+ // data包含key, value, ttl, success等信息
215
+ });
216
+
217
+ // 监听设置操作的错误事件
218
+ redis.on('set_error', (data) => {
219
+ $.log.error('[Redis] 设置缓存错误:', data);
220
+ // data包含key, value, ttl, error等信息
221
+ });
222
+ ```
223
+
224
+ #### 事件属性规范
225
+
226
+ 所有事件都遵循统一的属性命名规范:
227
+
228
+ 1. **通用属性**:
229
+ - `key`: 操作的键名
230
+ - `value`: 操作的值(替代str、fields、obj等)
231
+ - `ttl`: 过期时间(替代seconds)
232
+ - `result`: 操作结果(替代length)
233
+ - `success`: 操作是否成功
234
+ - `cancel`: 是否取消操作(仅限前置事件)
235
+ - `error`: 错误信息(仅限错误事件)
236
+
237
+ 2. **特定属性**:
238
+ - `deleted`: 删除的键列表(用于del操作)
239
+ - `index`: 索引位置(用于setrange操作)
240
+ - `field`: 哈希字段名(用于hset操作)
241
+
242
+ 3. **事件命名模式**:
243
+ - 前置事件: `${methodName}_before`
244
+ - 后置事件: `${methodName}_after`
245
+ - 错误事件: `${methodName}_error`
246
+
247
+ #### 支持的事件列表
248
+
249
+ | 操作方法 | 前置事件 | 后置事件 | 错误事件 |
250
+ |---------|---------|---------|--------|
251
+ | set | set_before | set_after | set_error |
252
+ | get | get_before | get_after | get_error |
253
+ | del | del_before | del_after | del_error |
254
+ | add | add_before | add_after | add_error |
255
+ | addInt | addInt_before | addInt_after | addInt_error |
256
+ | addFloat | addFloat_before | addFloat_after | addFloat_error |
257
+ | addStr | addStr_before | addStr_after | addStr_error |
258
+ | setrange | setrange_before | setrange_after | setrange_error |
259
+ | clear | clear_before | clear_after | clear_error |
260
+ | list_set | list_set_before | list_set_after | list_set_error |
261
+ | list_push | list_push_before | list_push_after | list_push_error |
262
+ | list_clear | list_clear_before | list_clear_after | list_clear_error |
263
+ | mset | mset_before | mset_after | mset_error |
264
+ | mget | mget_before | mget_after | mget_error |
265
+ | hset | hset_before | hset_after | hset_error |
266
+ | hmset | hmset_before | hmset_after | hmset_error |
267
+ | hdel | hdel_before | hdel_after | hdel_error |
268
+ | hget | hget_before | hget_after | hget_error |
269
+ | hgetall | hgetall_before | hgetall_after | hgetall_error |
270
+
197
271
  ## API文档
198
272
 
199
273
  ### 连接管理
@@ -278,9 +352,16 @@ await redis.unsubscribe('notifications');
278
352
  3. **合理设置过期时间**: 避免Redis中数据无限增长
279
353
  4. **使用键前缀**: 通过键前缀进行业务隔离,避免键冲突
280
354
  5. **及时关闭连接**: 在应用结束时调用close()方法关闭所有连接
355
+ 6. **利用事件系统**: 使用事件系统进行日志记录、数据验证和操作拦截
281
356
 
282
357
  ## 版本更新
283
358
 
359
+ ### 1.7.0 (2024-10-07)
360
+ - 统一事件系统的属性命名规范
361
+ - 更新所有方法的事件emit属性,使用统一的key、value、ttl、result等命名
362
+ - 增加事件系统的详细文档
363
+ - 修复部分方法中的拼写错误
364
+
284
365
  ### 1.6.0 (2024-01-10)
285
366
  - 添加完整的连接池管理功能
286
367
  - 新增Pipeline批量操作优化
package/index.js CHANGED
@@ -479,7 +479,7 @@ Redis.prototype.ttl = async function(key, seconds) {
479
479
  Redis.prototype.addInt = async function(key, num) {
480
480
  try {
481
481
  // 触发前置事件,允许修改或阻止操作
482
- const beforeEventData = { key, num, cancel: false };
482
+ const beforeEventData = { key, value: num, cancel: false };
483
483
  this.emit('addInt_before', beforeEventData);
484
484
 
485
485
  // 如果事件处理器标记为取消,则返回false
@@ -489,7 +489,7 @@ Redis.prototype.addInt = async function(key, num) {
489
489
  }
490
490
 
491
491
  // 使用可能被修改的值
492
- let { key: finalKey, num: finalNum } = beforeEventData;
492
+ let { key: finalKey, value: finalNum } = beforeEventData;
493
493
 
494
494
  const connection = await this._getConnection();
495
495
  try {
@@ -534,14 +534,14 @@ Redis.prototype.addInt = async function(key, num) {
534
534
  }
535
535
 
536
536
  // 触发后置事件
537
- this.emit('addInt_after', { key: finalKey, num: finalNum, result });
537
+ this.emit('addInt_after', { key: finalKey, value: finalNum, result, success: true });
538
538
  return result;
539
539
  } finally {
540
540
  this._recycleConnection(connection);
541
541
  }
542
542
  } catch (err) {
543
543
  // 触发错误事件
544
- this.emit('addInt_error', { key, num, error: err });
544
+ this.emit('addInt_error', { key, value: num, error: err });
545
545
  $.log.error(`[Redis] 增加整数值失败 [${key}]:`, err);
546
546
  throw err;
547
547
  }
@@ -556,7 +556,7 @@ Redis.prototype.addInt = async function(key, num) {
556
556
  Redis.prototype.addFloat = async function(key, num) {
557
557
  try {
558
558
  // 触发前置事件,允许修改或阻止操作
559
- const beforeEventData = { key, num, cancel: false };
559
+ const beforeEventData = { key, value: num, cancel: false };
560
560
  this.emit('addFloat_before', beforeEventData);
561
561
 
562
562
  // 如果事件处理器标记为取消,则抛出错误
@@ -566,7 +566,7 @@ Redis.prototype.addFloat = async function(key, num) {
566
566
  }
567
567
 
568
568
  // 使用可能被修改的值
569
- let { key: finalKey, num: finalNum } = beforeEventData;
569
+ let { key: finalKey, value: finalNum } = beforeEventData;
570
570
  let result;
571
571
 
572
572
  const connection = await this._getConnection();
@@ -595,7 +595,7 @@ Redis.prototype.addFloat = async function(key, num) {
595
595
  }
596
596
 
597
597
  // 触发后置事件
598
- this.emit('addFloat_after', { key: finalKey, num: finalNum, result });
598
+ this.emit('addFloat_after', { key: finalKey, value: finalNum, result, success: true });
599
599
  return result;
600
600
  } catch (err) {
601
601
  // 如果出错,回退到先获取再设置的方式
@@ -609,14 +609,14 @@ Redis.prototype.addFloat = async function(key, num) {
609
609
  await this.set(finalKey, n);
610
610
 
611
611
  // 触发后置事件
612
- this.emit('addFloat_after', { key: finalKey, num: finalNum, result: n });
612
+ this.emit('addFloat_after', { key: finalKey, value: finalNum, result: n, success: true });
613
613
  return n;
614
614
  } finally {
615
615
  this._recycleConnection(connection);
616
616
  }
617
617
  } catch (err) {
618
618
  // 触发错误事件
619
- this.emit('addFloat_error', { key, num, error: err });
619
+ this.emit('addFloat_error', { key, value: num, error: err });
620
620
  $.log.error(`[Redis] 增加浮点数值失败 [${key}]:`, err);
621
621
  throw err;
622
622
  }
@@ -631,7 +631,7 @@ Redis.prototype.addFloat = async function(key, num) {
631
631
  Redis.prototype.addStr = async function(key, str) {
632
632
  try {
633
633
  // 触发前置事件,允许修改或阻止操作
634
- const beforeEventData = { key, str, cancel: false };
634
+ const beforeEventData = { key, value: str, cancel: false };
635
635
  this.emit('addStr_before', beforeEventData);
636
636
 
637
637
  // 如果事件处理器标记为取消,则返回0
@@ -641,7 +641,7 @@ Redis.prototype.addStr = async function(key, str) {
641
641
  }
642
642
 
643
643
  // 使用可能被修改的值
644
- let { key: finalKey, str: finalStr } = beforeEventData;
644
+ let { key: finalKey, value: finalStr } = beforeEventData;
645
645
  let result;
646
646
 
647
647
  const connection = await this._getConnection();
@@ -666,7 +666,7 @@ Redis.prototype.addStr = async function(key, str) {
666
666
  }
667
667
 
668
668
  // 触发后置事件
669
- this.emit('addStr_after', { key: finalKey, str: finalStr, length: result });
669
+ this.emit('addStr_after', { key: finalKey, value: finalStr, result, success: true });
670
670
  return result;
671
671
  } catch (err) {
672
672
  $.log.error('[Redis] 追加字符串失败:', err);
@@ -676,14 +676,14 @@ Redis.prototype.addStr = async function(key, str) {
676
676
  await this.set(finalKey, value);
677
677
 
678
678
  // 触发后置事件
679
- this.emit('addStr_after', { key: finalKey, str: finalStr, length: value.length });
679
+ this.emit('addStr_after', { key: finalKey, value: finalStr, result: value.length, success: true });
680
680
  return value.length;
681
681
  } finally {
682
682
  this._recycleConnection(connection);
683
683
  }
684
684
  } catch (err) {
685
685
  // 触发错误事件
686
- this.emit('addStr_error', { key, str, error: err });
686
+ this.emit('addStr_error', { key, value: str, error: err });
687
687
  $.log.error(`[Redis] 追加字符串失败 [${key}]:`, err);
688
688
  return 0;
689
689
  }
@@ -715,25 +715,25 @@ Redis.prototype.del = async function(key) {
715
715
  if (Array.isArray(finalKey)) {
716
716
  // 批量删除 - 分别删除每个键以确保正确处理
717
717
  success = true;
718
- const deletedKeys = [];
718
+ const deleted = [];
719
719
  for (const k of finalKey) {
720
720
  const prefixedKey = this.applyPrefix(k);
721
721
  const result = await connection.del(prefixedKey);
722
722
  if (result !== 1) {
723
723
  success = false;
724
724
  } else {
725
- deletedKeys.push(k);
725
+ deleted.push(k);
726
726
  }
727
727
  }
728
728
  // 触发后置事件
729
- this.emit('del_after', { key: finalKey, success, deletedKeys });
729
+ this.emit('del_after', { key: finalKey, success, deleted });
730
730
  } else {
731
731
  // 单个删除
732
732
  const prefixedKey = this.applyPrefix(finalKey);
733
733
  const n = await connection.del(prefixedKey);
734
734
  success = n === 1;
735
735
  // 触发后置事件
736
- this.emit('del_after', { key: finalKey, success, deletedKeys: success ? [finalKey] : [] });
736
+ this.emit('del_after', { key: finalKey, success, deleted: success ? [finalKey] : [] });
737
737
  }
738
738
  return success;
739
739
  } finally {
@@ -757,7 +757,7 @@ Redis.prototype.del = async function(key) {
757
757
  Redis.prototype.set = async function(key, value, seconds) {
758
758
  try {
759
759
  // 触发前置事件,允许修改或阻止操作
760
- const beforeEventData = { key, value, seconds, cancel: false };
760
+ const beforeEventData = { key, value, ttl: seconds, cancel: false };
761
761
  this.emit('set_before', beforeEventData);
762
762
 
763
763
  // 如果事件处理器标记为取消,则返回false
@@ -767,7 +767,7 @@ Redis.prototype.set = async function(key, value, seconds) {
767
767
  }
768
768
 
769
769
  // 使用可能被修改的值
770
- let { key: finalKey, value: finalValue, seconds: finalSeconds } = beforeEventData;
770
+ let { key: finalKey, value: finalValue, ttl: finalSeconds } = beforeEventData;
771
771
 
772
772
  const connection = await this._getConnection();
773
773
  try {
@@ -785,7 +785,7 @@ Redis.prototype.set = async function(key, value, seconds) {
785
785
  }
786
786
 
787
787
  // 触发后置事件
788
- this.emit('set_after', { key, value, seconds, success: true });
788
+ this.emit('set_after', { key, value, ttl: seconds, success: true });
789
789
  return true;
790
790
  } finally {
791
791
  this._recycleConnection(connection);
@@ -793,7 +793,7 @@ Redis.prototype.set = async function(key, value, seconds) {
793
793
  } catch (err) {
794
794
  $.log.error(`[Redis] 设置缓存失败 [${key}]:`, err);
795
795
  // 触发错误事件
796
- this.emit('set_error', { key, value, seconds, error: err });
796
+ this.emit('set_error', { key, value, error: err });
797
797
  return false;
798
798
  }
799
799
  };
@@ -808,7 +808,7 @@ Redis.prototype.set = async function(key, value, seconds) {
808
808
  Redis.prototype.add = async function(key, value, seconds) {
809
809
  try {
810
810
  // 触发前置事件,允许修改或阻止操作
811
- const beforeEventData = { key, value, seconds, cancel: false };
811
+ const beforeEventData = { key, value, ttl: seconds, cancel: false };
812
812
  this.emit('add_before', beforeEventData);
813
813
 
814
814
  // 如果事件处理器标记为取消,则返回false
@@ -818,7 +818,7 @@ Redis.prototype.add = async function(key, value, seconds) {
818
818
  }
819
819
 
820
820
  // 使用可能被修改的值
821
- let { key: finalKey, value: finalValue, seconds: finalSeconds } = beforeEventData;
821
+ let { key: finalKey, value: finalValue, ttl: finalSeconds } = beforeEventData;
822
822
 
823
823
  const connection = await this._getConnection();
824
824
  try {
@@ -832,7 +832,7 @@ Redis.prototype.add = async function(key, value, seconds) {
832
832
  const success = result === "OK";
833
833
 
834
834
  // 触发后置事件
835
- this.emit('add_after', { key, value, seconds, success });
835
+ this.emit('add_after', { key: finalKey, value: finalValue, ttl: finalSeconds, success });
836
836
  return success;
837
837
  } finally {
838
838
  this._recycleConnection(connection);
@@ -840,7 +840,7 @@ Redis.prototype.add = async function(key, value, seconds) {
840
840
  } catch (err) {
841
841
  $.log.error(`[Redis] 添加缓存失败 [${key}]:`, err);
842
842
  // 触发错误事件
843
- this.emit('add_error', { key, value, seconds, error: err });
843
+ this.emit('add_error', { key, value, ttl: seconds, error: err });
844
844
  return false;
845
845
  }
846
846
  };
@@ -988,7 +988,7 @@ Redis.prototype.setrange = async function(key, index, value) {
988
988
  }
989
989
 
990
990
  // 触发后置事件
991
- this.emit('setrange_after', { key: finalKey, index: finalIndex, value: finalValue, length: result, success: true });
991
+ this.emit('setrange_after', { key: finalKey, index: finalIndex, value: finalValue, result, success: true });
992
992
  return result;
993
993
  } catch (err) {
994
994
  $.log.error('[Redis] 设置字符串范围失败:', err);
@@ -1002,7 +1002,7 @@ Redis.prototype.setrange = async function(key, index, value) {
1002
1002
  await this.set(finalKey, str);
1003
1003
 
1004
1004
  // 触发后置事件
1005
- this.emit('setrange_after', { key: finalKey, index: finalIndex, value: finalValue, length: str.length, success: true });
1005
+ this.emit('setrange_after', { key: finalKey, index: finalIndex, value: finalValue, result: str.length, success: true });
1006
1006
  return str.length;
1007
1007
  } finally {
1008
1008
  this._recycleConnection(connection);
@@ -1160,7 +1160,7 @@ Redis.prototype.keys = async function(pattern = '*') {
1160
1160
  Redis.prototype.list_set = async function(key, value, seconds) {
1161
1161
  try {
1162
1162
  // 触发前置事件,允许修改或阻止操作
1163
- const beforeEventData = { key, value, seconds, cancel: false };
1163
+ const beforeEventData = { key, value, ttl: seconds, cancel: false };
1164
1164
  this.emit('list_set_before', beforeEventData);
1165
1165
 
1166
1166
  // 如果事件处理器标记为取消,则返回0
@@ -1170,7 +1170,7 @@ Redis.prototype.list_set = async function(key, value, seconds) {
1170
1170
  }
1171
1171
 
1172
1172
  // 使用可能被修改的值
1173
- let { key: finalKey, value: finalValue, seconds: finalSeconds } = beforeEventData;
1173
+ let { key: finalKey, value: finalValue, ttl: finalSeconds } = beforeEventData;
1174
1174
  let len = 0;
1175
1175
 
1176
1176
  const connection = await this._getConnection();
@@ -1218,14 +1218,14 @@ Redis.prototype.list_set = async function(key, value, seconds) {
1218
1218
  }
1219
1219
 
1220
1220
  // 触发后置事件
1221
- this.emit('list_set_after', { key: finalKey, value: finalValue, seconds: finalSeconds, length: len, success: len > 0 });
1221
+ this.emit('list_set_after', { key: finalKey, value: finalValue, ttl: finalSeconds, result: len, success: len > 0 });
1222
1222
  return len;
1223
1223
  } finally {
1224
1224
  this._recycleConnection(connection);
1225
1225
  }
1226
1226
  } catch (err) {
1227
1227
  // 触发错误事件
1228
- this.emit('list_set_error', { key, value, seconds, error: err });
1228
+ this.emit('list_set_error', { key, value, error: err });
1229
1229
  $.log.error(`[Redis] 设置列表失败 [${key}]:`, err);
1230
1230
  return 0;
1231
1231
  }
@@ -1283,7 +1283,7 @@ Redis.prototype.list_push = async function(key, value) {
1283
1283
  }
1284
1284
 
1285
1285
  // 触发后置事件
1286
- this.emit('list_push_after', { key: finalKey, value: finalValue, length: len, success });
1286
+ this.emit('list_push_after', { key: finalKey, value: finalValue, result: len, success });
1287
1287
  return len;
1288
1288
  } finally {
1289
1289
  this._recycleConnection(connection);
@@ -1512,7 +1512,7 @@ Redis.prototype.mget = async function(keys) {
1512
1512
  Redis.prototype.mset = async function(obj, seconds) {
1513
1513
  try {
1514
1514
  // 触发前置事件,允许修改或阻止操作
1515
- const beforeEventData = { data: obj, ttl: seconds, cancel: false };
1515
+ const beforeEventData = { value: obj, ttl: seconds, cancel: false };
1516
1516
  this.emit('mset_before', beforeEventData);
1517
1517
 
1518
1518
  // 如果事件处理器标记为取消,则返回false
@@ -1522,11 +1522,11 @@ Redis.prototype.mset = async function(obj, seconds) {
1522
1522
  }
1523
1523
 
1524
1524
  // 使用可能被修改的值
1525
- let { data: finalData, ttl: finalSeconds } = beforeEventData;
1525
+ let { value: finalData, ttl: finalSeconds } = beforeEventData;
1526
1526
 
1527
1527
  // 检查最终数据是否有效
1528
1528
  if (!finalData || typeof finalData !== 'object') {
1529
- throw new Error('事件处理后的data必须是非空对象');
1529
+ throw new Error('事件处理后的value必须是非空对象');
1530
1530
  }
1531
1531
 
1532
1532
  // 使用Pipeline优化批量操作
@@ -1545,11 +1545,11 @@ Redis.prototype.mset = async function(obj, seconds) {
1545
1545
  await pipeline.exec();
1546
1546
 
1547
1547
  // 触发后置事件
1548
- this.emit('mset_after', { data: finalData, ttl: finalSeconds, success: true });
1548
+ this.emit('mset_after', { value: finalData, ttl: finalSeconds, success: true });
1549
1549
  return true;
1550
1550
  } catch (err) {
1551
1551
  // 触发错误事件
1552
- this.emit('mset_error', { data: obj, ttl: seconds, error: err });
1552
+ this.emit('mset_error', { value: obj, ttl: seconds, error: err });
1553
1553
 
1554
1554
  // 如果Pipeline失败,回退到原实现
1555
1555
  $.log.warn('[Redis] 使用Pipeline批量设置失败,使用回退方案:', err);
@@ -1571,11 +1571,11 @@ Redis.prototype.mset = async function(obj, seconds) {
1571
1571
  }
1572
1572
 
1573
1573
  // 触发后置事件(使用原始数据,因为前置数据修改处理已失败)
1574
- this.emit('mset_after', { data: obj, ttl: seconds, success: true });
1574
+ this.emit('mset_after', { value: obj, ttl: seconds, success: true });
1575
1575
  return true;
1576
1576
  } catch (fallbackErr) {
1577
1577
  // 触发错误事件
1578
- this.emit('mset_error', { data: obj, ttl: seconds, error: fallbackErr });
1578
+ this.emit('mset_error', { value: obj, ttl: seconds, error: fallbackErr });
1579
1579
  $.log.error('[Redis] 回退方案批量设置也失败:', fallbackErr);
1580
1580
  return false;
1581
1581
  } finally {
@@ -1666,7 +1666,7 @@ Redis.prototype.hvals = async function(key) {
1666
1666
  Redis.prototype.hdel = async function(key, fields) {
1667
1667
  try {
1668
1668
  // 触发前置事件,允许修改或阻止操作
1669
- const beforeEventData = { key, fields, cancel: false };
1669
+ const beforeEventData = { key, value: fields, cancel: false };
1670
1670
  this.emit('hdel_before', beforeEventData);
1671
1671
 
1672
1672
  // 如果事件处理器标记为取消,则返回false
@@ -1676,7 +1676,7 @@ Redis.prototype.hdel = async function(key, fields) {
1676
1676
  }
1677
1677
 
1678
1678
  // 使用可能被修改的值
1679
- let { key: finalKey, fields: finalFields } = beforeEventData;
1679
+ let { key: finalKey, value: finalFields } = beforeEventData;
1680
1680
  let success = true;
1681
1681
 
1682
1682
  const connection = await this._getConnection();
@@ -1697,14 +1697,14 @@ Redis.prototype.hdel = async function(key, fields) {
1697
1697
  }
1698
1698
 
1699
1699
  // 触发后置事件
1700
- this.emit('hdel_after', { key: finalKey, fields: finalFields, success });
1700
+ this.emit('hdel_after', { key: finalKey, value: finalFields, success });
1701
1701
  return success;
1702
1702
  } finally {
1703
1703
  this._recycleConnection(connection);
1704
1704
  }
1705
1705
  } catch (err) {
1706
1706
  // 触发错误事件
1707
- this.emit('hdel_error', { key, fields, error: err });
1707
+ this.emit('hdel_error', { key, value: fields, error: err });
1708
1708
  $.log.error(`[Redis] 删除哈希字段失败 [${key}]:`, err);
1709
1709
  return false;
1710
1710
  }
@@ -2146,7 +2146,7 @@ Redis.prototype.hset = async function(key, field, value) {
2146
2146
  await connection.execute('hset', finalKey, finalField, finalValue);
2147
2147
 
2148
2148
  // 触发后置事件
2149
- this.emit('hset_after', { key, field, value, success: true });
2149
+ this.emit('hset_after', { key: finalKey, field: finalField, value: finalValue, success: true });
2150
2150
  return true;
2151
2151
  } finally {
2152
2152
  this._recycleConnection(connection);
@@ -2203,7 +2203,7 @@ Redis.prototype.hget = async function(key, field) {
2203
2203
  Redis.prototype.hmset = async function(key, obj) {
2204
2204
  try {
2205
2205
  // 触发前置事件,允许修改或阻止操作
2206
- const beforeEventData = { key, obj, cancel: false };
2206
+ const beforeEventData = { key, value: obj, cancel: false };
2207
2207
  this.emit('hmset_before', beforeEventData);
2208
2208
 
2209
2209
  // 如果事件处理器标记为取消,则返回false
@@ -2213,7 +2213,7 @@ Redis.prototype.hmset = async function(key, obj) {
2213
2213
  }
2214
2214
 
2215
2215
  // 使用可能被修改的值
2216
- let { key: finalKey, obj: finalObj } = beforeEventData;
2216
+ let { key: finalKey, value: finalObj } = beforeEventData;
2217
2217
 
2218
2218
  const connection = await this._getConnection();
2219
2219
  try {
@@ -2232,15 +2232,15 @@ Redis.prototype.hmset = async function(key, obj) {
2232
2232
  }
2233
2233
 
2234
2234
  // 触发后置事件
2235
- this.emit('hmset_after', { key, obj, success: true });
2235
+ this.emit('hmset_after', { key: finalKey, value: finalObj, success: true });
2236
2236
  return true;
2237
2237
  } finally {
2238
- this._releaseConnection(connection);
2238
+ this._recycleConnection(connection);
2239
2239
  }
2240
2240
  } catch (err) {
2241
2241
  $.log.error(`[Redis] 批量设置哈希字段失败 [${key}]:`, err);
2242
2242
  // 触发错误事件
2243
- this.emit('hmset_error', { key, obj, error: err });
2243
+ this.emit('hmset_error', { key, value: obj, error: err });
2244
2244
  return false;
2245
2245
  }
2246
2246
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mm_redis",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "这是超级美眉redis缓存帮助类",
5
5
  "main": "index.js",
6
6
  "scripts": {