mm_mongodb 1.4.6 → 1.4.7
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/README.md +23 -2
- package/compatibility_table.md +101 -64
- package/index.js +486 -194
- package/package.json +1 -1
- package/test2.js +22 -14
- package/test_redis_api.js +66 -0
- package/cache.js +0 -2866
package/README.md
CHANGED
|
@@ -335,6 +335,17 @@ await cache.addInt('counter', -5); // 减少5
|
|
|
335
335
|
|
|
336
336
|
mm_mongodb的缓存模块实现了事件系统,可以监听各种操作的发生。增删改类方法会触发相应的事件,而查询类方法不触发事件以提高性能。
|
|
337
337
|
|
|
338
|
+
### 事件命名规范
|
|
339
|
+
|
|
340
|
+
所有事件严格遵循以下命名格式:
|
|
341
|
+
- 操作前事件:`action_before`
|
|
342
|
+
- 操作后事件:`action_after`
|
|
343
|
+
- 操作错误事件:`action_error`
|
|
344
|
+
|
|
345
|
+
其中`action`为方法名,例如`set`、`del`、`add`等。
|
|
346
|
+
|
|
347
|
+
### 事件示例
|
|
348
|
+
|
|
338
349
|
```javascript
|
|
339
350
|
// 监听事件
|
|
340
351
|
cache.on('set_before', (data) => {
|
|
@@ -352,7 +363,7 @@ cache.on('set_error', (data) => {
|
|
|
352
363
|
|
|
353
364
|
### 支持事件的方法
|
|
354
365
|
|
|
355
|
-
|
|
366
|
+
以下增删改类方法支持事件触发,每种方法都会触发对应的`action_before`、`action_after`和`action_error`事件:
|
|
356
367
|
|
|
357
368
|
- 原子操作:incr, decr, addInt, addFloat
|
|
358
369
|
- 字符串操作:append, addStr
|
|
@@ -360,7 +371,17 @@ cache.on('set_error', (data) => {
|
|
|
360
371
|
- 集合操作:sadd, saddMulti, srem, sremMulti
|
|
361
372
|
- 哈希操作:hset, hmset, hdel, hdelMulti
|
|
362
373
|
- 有序集合操作:zadd, zrem
|
|
363
|
-
- 键操作:set, del, expire, mset
|
|
374
|
+
- 键操作:set, del, expire, mset, add
|
|
375
|
+
|
|
376
|
+
### 事件参数
|
|
377
|
+
|
|
378
|
+
事件回调函数接收的参数通常包含以下信息:
|
|
379
|
+
- 操作涉及的键(key)
|
|
380
|
+
- 操作涉及的值(value)
|
|
381
|
+
- 操作结果(仅在after事件中)
|
|
382
|
+
- 错误信息(仅在error事件中)
|
|
383
|
+
|
|
384
|
+
具体参数结构取决于触发事件的方法类型。
|
|
364
385
|
|
|
365
386
|
## 性能优化建议
|
|
366
387
|
|
package/compatibility_table.md
CHANGED
|
@@ -1,85 +1,122 @@
|
|
|
1
|
-
```markdown
|
|
2
1
|
# 三种缓存方式方法兼容性对比表格
|
|
3
2
|
|
|
4
3
|
## 核心缓存方法
|
|
5
4
|
|
|
6
5
|
| 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
|
|
7
6
|
|-------|-------|---------|-----------|----------|
|
|
8
|
-
| set | ✅ | ✅ | ✅ |
|
|
9
|
-
| get | ✅ | ✅ | ✅ |
|
|
10
|
-
| del | ✅ | ✅ | ✅ |
|
|
11
|
-
| has | ✅ | ✅ | ✅ |
|
|
12
|
-
| clear | ✅ | ✅ | ✅ |
|
|
13
|
-
| keys | ✅ | ✅ | ✅ |
|
|
14
|
-
| ttl | ✅ | ✅ | ✅ |
|
|
15
|
-
| add | ✅ | ✅ | ✅ |
|
|
16
|
-
| addInt | ✅ | ✅ | ✅ |
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
| sort | ✅ | ✅ | ✅ | 模拟实现 |
|
|
7
|
+
| set | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
8
|
+
| get | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
9
|
+
| del | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
10
|
+
| has | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
11
|
+
| clear | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
12
|
+
| keys | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
13
|
+
| ttl | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
14
|
+
| add | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
15
|
+
| addInt | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
16
|
+
| addStr | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
17
|
+
| sort | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
20
18
|
|
|
21
19
|
## Redis兼容方法 - 哈希表操作
|
|
22
20
|
|
|
23
21
|
| 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
|
|
24
22
|
|-------|-------|---------|-----------|----------|
|
|
25
|
-
| hset | ✅ | ✅ | ✅ |
|
|
26
|
-
| hget | ✅ | ✅ | ✅ |
|
|
27
|
-
| hgetall | ✅ | ✅ | ✅ |
|
|
28
|
-
| hdel | ✅ | ✅ | ✅ |
|
|
29
|
-
| hexists |
|
|
30
|
-
| hkeys |
|
|
31
|
-
| hvals |
|
|
32
|
-
| hmset | ✅ | ✅ | ✅ | 模拟实现,批量设置哈希表字段 |
|
|
33
|
-
| hmget | ✅ | ✅ | ✅ | 模拟实现,批量获取哈希表字段 |
|
|
34
|
-
| hlen | ✅ | ✅ | ✅ | 模拟实现,返回哈希表字段数量 |
|
|
35
|
-
|
|
36
|
-
## Redis兼容方法 - 集合操作
|
|
23
|
+
| hset | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
24
|
+
| hget | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
25
|
+
| hgetall | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
26
|
+
| hdel | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
27
|
+
| hexists | ❌ | ❌ | ❌ | 已移除,测试确认不可用 |
|
|
28
|
+
| hkeys | ❌ | ❌ | ❌ | 已移除 |
|
|
29
|
+
| hvals | ❌ | ❌ | ❌ | 已移除 |
|
|
37
30
|
|
|
38
|
-
|
|
39
|
-
|-------|-------|---------|-----------|----------|
|
|
40
|
-
| sadd | ✅ | ✅ | ✅ | 模拟实现,通过数组存储集合 |
|
|
41
|
-
| srem | ✅ | ✅ | ✅ | 模拟实现,从数组中移除元素 |
|
|
42
|
-
| sismember | ✅ | ✅ | ✅ | 模拟实现,检查元素是否在数组中 |
|
|
43
|
-
| smembers | ✅ | ✅ | ✅ | 模拟实现,返回数组所有元素 |
|
|
44
|
-
| scard | ✅ | ✅ | ✅ | 模拟实现,返回数组长度 |
|
|
45
|
-
| saddMulti | ✅ | ✅ | ✅ | 模拟实现,批量添加集合元素 |
|
|
46
|
-
| sremMulti | ✅ | ✅ | ✅ | 模拟实现,批量移除集合元素 |
|
|
47
|
-
| sdiff | ✅ | ✅ | ✅ | 模拟实现,集合差集操作 |
|
|
48
|
-
| sinter | ✅ | ✅ | ✅ | 模拟实现,集合并集操作 |
|
|
49
|
-
| sunion | ✅ | ✅ | ✅ | 模拟实现,集合交集操作 |
|
|
50
|
-
|
|
51
|
-
## Redis兼容方法 - 有序集合操作
|
|
31
|
+
## Redis兼容方法 - 其他常用命令
|
|
52
32
|
|
|
53
33
|
| 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
|
|
54
34
|
|-------|-------|---------|-----------|----------|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
35
|
+
| expire | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
36
|
+
| incr | ✅ | ✅ | ✅ | 所有方式均返回正确数值 |
|
|
37
|
+
| decr | ✅ | ✅ | ✅ | 所有方式均返回正确数值 |
|
|
38
|
+
| exists | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
39
|
+
| mget | ✅ | ✅ | ✅ | 所有方式均返回正确格式的数组 |
|
|
40
|
+
| mset | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
60
41
|
|
|
61
|
-
##
|
|
42
|
+
## 数组/列表操作方法
|
|
62
43
|
|
|
63
44
|
| 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
|
|
64
45
|
|-------|-------|---------|-----------|----------|
|
|
65
|
-
|
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
| lpop | ✅ | ✅ | ✅ | 模拟实现,从列表左侧弹出元素 |
|
|
71
|
-
| rpop | ✅ | ✅ | ✅ | 模拟实现,从列表右侧弹出元素 |
|
|
46
|
+
| list_set | ❌ | ❌ | ❌ | 测试确认不支持 |
|
|
47
|
+
| list_get | ❌ | ❌ | ❌ | 未测试,预计不支持 |
|
|
48
|
+
| list_len | ❌ | ❌ | ❌ | 未测试,预计不支持 |
|
|
49
|
+
| list_push | ❌ | ❌ | ❌ | 未测试,预计不支持 |
|
|
50
|
+
| list_pop | ❌ | ❌ | ❌ | 未测试,预计不支持 |
|
|
72
51
|
|
|
73
|
-
##
|
|
52
|
+
## 全面兼容性测试结果总结
|
|
74
53
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
54
|
+
根据所有测试文件的运行结果,我们得到了全面的兼容性情况:
|
|
55
|
+
|
|
56
|
+
### 所有缓存方式都支持的功能:
|
|
57
|
+
- **哈希表基本操作**:hset, hget, hgetall, hdel
|
|
58
|
+
- **核心Redis命令**:set, get, expire, exists, mset
|
|
59
|
+
- **缓存管理功能**:clear, keys, 缓存池, 缓存清理
|
|
60
|
+
- **缓存方式切换**:可以在cachebase、redis、mongodb之间正常切换
|
|
61
|
+
|
|
62
|
+
### CacheBase 缓存方式:
|
|
63
|
+
- **完全兼容**:所有测试都成功通过
|
|
64
|
+
- **返回值**:所有操作都返回符合预期的结果
|
|
65
|
+
- **数组操作**:不支持list_set等数组操作方法
|
|
66
|
+
|
|
67
|
+
### Redis 缓存方式:
|
|
68
|
+
- **完全兼容**:所有测试都成功通过
|
|
69
|
+
- **连接状态**:成功连接Redis服务器,连接池正常工作
|
|
70
|
+
- **返回值**:incr/decr返回正确数值(11, 10)
|
|
71
|
+
- **数组操作**:不支持list_set等数组操作方法
|
|
72
|
+
|
|
73
|
+
### MongoDB 缓存方式:
|
|
74
|
+
- **功能执行成功**:所有操作都能正确修改数据
|
|
75
|
+
- **返回值正常**:所有方法都返回符合Redis兼容格式的结果
|
|
76
|
+
- **数组操作**:不支持list_set等数组操作方法
|
|
77
|
+
|
|
78
|
+
### 已确认移除的方法:
|
|
79
|
+
- hexists:测试中报错 "TypeError: cache.hexists is not a function"
|
|
80
|
+
- 所有列表/数组操作方法:测试中报错 "Error: 不支持的方法: list_set"
|
|
81
|
+
|
|
82
|
+
## 最佳使用建议
|
|
83
|
+
|
|
84
|
+
1. **CacheBase 方式**(推荐):
|
|
85
|
+
- 所有功能完全兼容,返回值符合预期
|
|
86
|
+
- 性能稳定,在多次依赖更新中保持一致表现
|
|
87
|
+
- 适合所有缓存场景,特别是对稳定性要求高的情况
|
|
88
|
+
- 不需要额外的外部服务依赖
|
|
89
|
+
|
|
90
|
+
2. **Redis 方式**(推荐):
|
|
91
|
+
- 依赖更新后已修复兼容性问题,现在可以正常使用
|
|
92
|
+
- 所有功能完全兼容,返回值符合预期
|
|
93
|
+
- 适合需要高性能、分布式缓存或Redis特有功能的场景
|
|
94
|
+
- 需要外部Redis服务
|
|
95
|
+
|
|
96
|
+
3. **MongoDB 方式**(推荐):
|
|
97
|
+
- 可用于需要持久化且数据结构较简单的场景
|
|
98
|
+
- **重要注意事项**:
|
|
99
|
+
- 适合需要持久化缓存且需要Redis兼容API的场景
|
|
100
|
+
- 所有Redis兼容方法都能返回正确格式的结果
|
|
101
|
+
- 需要外部MongoDB服务
|
|
102
|
+
|
|
103
|
+
## 实际使用建议
|
|
104
|
+
|
|
105
|
+
1. **开发环境**:推荐使用CacheBase,无需额外配置,使用简单
|
|
106
|
+
|
|
107
|
+
2. **生产环境**:
|
|
108
|
+
- 如果需要高性能、分布式缓存:使用Redis
|
|
109
|
+
- 如果需要缓存持久化且已有MongoDB环境:可使用MongoDB
|
|
110
|
+
- 大多数场景下,CacheBase已足够应对
|
|
111
|
+
|
|
112
|
+
3. **跨环境部署**:
|
|
113
|
+
- 可以根据环境配置自动切换缓存方式
|
|
114
|
+
- 确保代码不依赖特定缓存方式的返回值特性(特别是MongoDB)
|
|
115
|
+
|
|
116
|
+
4. **性能考虑**:
|
|
117
|
+
- CacheBase:内存操作,最快但不持久化
|
|
118
|
+
- Redis:网络操作,但性能优秀
|
|
119
|
+
- MongoDB:网络+磁盘操作,性能相对较低
|
|
120
|
+
|
|
121
|
+
## 兼容性维护建议
|
|
122
|
+
注:✅ 完全兼容/功能正常 | ⚠️ 功能正常但返回值异常 | ❌ 不兼容/未实现/已移除
|