mm_cachebase 1.8.4 → 1.8.6
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/compatibility_table.md +63 -164
- package/index.js +187 -66
- package/package.json +1 -1
- package/test_compatibility_fixes.js +272 -0
- package/test_compatibility_improvements.js +147 -0
- package/test_list_and_decr_compatibility.js +99 -0
- package/test_undocumented_methods.js +57 -0
package/compatibility_table.md
CHANGED
|
@@ -4,199 +4,98 @@
|
|
|
4
4
|
|
|
5
5
|
| 方法名 | Redis | MongoDB | CacheBase | Memory | 状态说明 |
|
|
6
6
|
|-------|-------|---------|-----------|--------|----------|
|
|
7
|
-
| set | ✅ | ✅ | ✅ | ✅ |
|
|
7
|
+
| set | ✅ | ✅ | ✅ | ✅ | 所有方式均与Redis行为完全一致 |
|
|
8
8
|
| get | ✅ | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
9
|
-
| del | ✅ | ✅ | ✅ | ✅ |
|
|
10
|
-
| has | ✅ | ✅ | ✅ | ✅ |
|
|
11
|
-
| clear | ✅ | ✅ | ✅ | ✅ |
|
|
12
|
-
| keys | ✅ | ✅ | ✅ | ✅ |
|
|
13
|
-
| ttl | ✅ |
|
|
9
|
+
| del | ✅ | ✅ | ✅ | ✅ | 所有方式均与Redis行为完全一致 |
|
|
10
|
+
| has | ✅ | ✅ | ✅ | ✅ | 所有方式都支持 |
|
|
11
|
+
| clear | ✅ | ✅ | ✅ | ✅ | 所有方式均与Redis行为完全一致 |
|
|
12
|
+
| keys | ✅ | ✅ | ✅ | ✅ | 所有方式都支持 |
|
|
13
|
+
| ttl | ✅ | ⚠️ | ✅ | ✅ | Redis、CacheBase和Memory与Redis行为一致,MongoDB行为不一致 |
|
|
14
14
|
| add | ✅ | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
15
|
-
| addInt | ✅ |
|
|
16
|
-
| addStr | ✅ |
|
|
17
|
-
| sort | ✅ | ✅ |
|
|
18
|
-
|
|
|
19
|
-
| list_add | ✅ | ⚠️ | ⚠️ | ⚠️ | 所有方式均通过通用实现支持,但底层可能需要各自实现 |
|
|
20
|
-
| list_has | ✅ | ⚠️ | ⚠️ | ⚠️ | 所有方式均通过通用实现支持,但底层可能需要各自实现 |
|
|
21
|
-
| list_get | ✅ | ⚠️ | ⚠️ | ⚠️ | 所有方式均通过通用实现支持,但底层可能需要各自实现 |
|
|
22
|
-
| list_clear | ✅ | ⚠️ | ⚠️ | ⚠️ | 所有方式均通过通用实现支持,但底层可能需要各自实现 |
|
|
15
|
+
| addInt | ✅ | ❌ | ✅ | ✅ | Redis正常工作,MongoDB追加失败,Memory和CacheBase支持 |
|
|
16
|
+
| addStr | ✅ | ❌ | ✅ | ✅ | Redis正常工作,MongoDB追加失败,Memory和CacheBase支持 |
|
|
17
|
+
| sort | ✅ | ✅ | ❌ | ❌ | Redis和MongoDB支持,其他方式不支持 |
|
|
18
|
+
| exists | ✅ | ✅ | ✅ | ✅ | 所有方式均与Redis行为完全一致,支持多键检查并返回数量 |
|
|
23
19
|
|
|
24
20
|
## Redis兼容方法 - 哈希表操作
|
|
25
21
|
|
|
26
22
|
| 方法名 | Redis | MongoDB | CacheBase | Memory | 状态说明 |
|
|
27
23
|
|-------|-------|---------|-----------|--------|----------|
|
|
28
|
-
| hset | ✅ | ✅ | ✅ | ✅ |
|
|
24
|
+
| hset | ✅ | ✅ | ✅ | ✅ | 所有方式均与Redis行为完全一致,新字段返回1,更新返回0 |
|
|
29
25
|
| hget | ✅ | ✅ | ✅ | ✅ | 所有方式均正常工作 |
|
|
30
|
-
| hgetall | ✅ | ✅ | ✅ | ✅ |
|
|
31
|
-
| hdel |
|
|
32
|
-
| hmset | ✅ | ✅ |
|
|
33
|
-
| hmget |
|
|
34
|
-
| hlen | ✅ | ✅ |
|
|
26
|
+
| hgetall | ✅ | ✅ | ✅ | ✅ | 所有方式都支持 |
|
|
27
|
+
| hdel | ✅ | ✅ | ✅ | ✅ | 所有方式都支持 |
|
|
28
|
+
| hmset | ✅ | ✅ | ❌ | ❌ | Redis和MongoDB支持,其他方式不支持 |
|
|
29
|
+
| hmget | ❌ | ✅ | ❌ | ❌ | 仅MongoDB支持 |
|
|
30
|
+
| hlen | ✅ | ✅ | ❌ | ❌ | Redis和MongoDB支持,其他方式不支持 |
|
|
35
31
|
|
|
36
32
|
## Redis兼容方法 - 其他常用命令
|
|
37
33
|
|
|
38
34
|
| 方法名 | Redis | MongoDB | CacheBase | Memory | 状态说明 |
|
|
39
35
|
|-------|-------|---------|-----------|--------|----------|
|
|
40
|
-
| expire | ✅ | ✅ | ✅ | ✅ |
|
|
41
|
-
| incr | ✅ | ✅ | ✅ | ✅ |
|
|
42
|
-
| decr | ✅ |
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
| rename | ✅ | ✅ | ✅ | ✅ | 键重命名,所有方式均正常工作 |
|
|
36
|
+
| expire | ✅ | ✅ | ✅ | ✅ | 所有方式都支持 |
|
|
37
|
+
| incr | ✅ | ✅ | ✅ | ✅ | 所有方式都支持 |
|
|
38
|
+
| decr | ✅ | ❌ | ✅ | ✅ | Redis、CacheBase和Memory支持,MongoDB不支持 |
|
|
39
|
+
| mget | ✅ | ✅ | ✅ | ✅ | 所有方式均与Redis行为完全一致,返回数组与输入键顺序一致 |
|
|
40
|
+
| mset | ✅ | ✅ | ✅ | ✅ | 所有方式均与Redis行为完全一致,返回'OK' |
|
|
41
|
+
| pexpire | ❌ | ❌ | ❌ | ❌ | 所有方式都不支持 |
|
|
42
|
+
| persist | ✅ | ❌ | ✅ | ✅ | Redis、CacheBase和Memory支持,MongoDB不支持 |
|
|
43
|
+
| strlen | ✅ | ❌ | ✅ | ❌ | Redis和CacheBase支持,其他方式不支持 |
|
|
44
|
+
| type | ❌ | ❌ | ❌ | ❌ | 所有方式都不支持 |
|
|
45
|
+
| rename | ❌ | ❌ | ❌ | ❌ | 所有方式都不支持 |
|
|
51
46
|
|
|
52
47
|
## Redis兼容方法 - 集合操作
|
|
53
48
|
|
|
54
49
|
| 方法名 | Redis | MongoDB | CacheBase | Memory | 状态说明 |
|
|
55
50
|
|-------|-------|---------|-----------|--------|----------|
|
|
56
|
-
| sadd | ✅ |
|
|
57
|
-
| srem | ✅ |
|
|
58
|
-
| sismember | ✅ | ✅ |
|
|
59
|
-
| smembers | ✅ | ✅ |
|
|
51
|
+
| sadd | ✅ | ❌ | ❌ | ❌ | 仅Redis支持 |
|
|
52
|
+
| srem | ✅ | ❌ | ❌ | ❌ | 仅Redis支持 |
|
|
53
|
+
| sismember | ✅ | ✅ | ❌ | ❌ | Redis和MongoDB支持,其他方式不支持 |
|
|
54
|
+
| smembers | ✅ | ✅ | ❌ | ❌ | Redis和MongoDB支持,其他方式不支持 |
|
|
60
55
|
|
|
61
56
|
## 数组/列表操作方法
|
|
62
57
|
|
|
63
58
|
| 方法名 | Redis | MongoDB | CacheBase | Memory | 状态说明 |
|
|
64
59
|
|-------|-------|---------|-----------|--------|----------|
|
|
65
|
-
| list_set | ✅ |
|
|
66
|
-
| list_add | ✅ |
|
|
67
|
-
| list_has | ✅ |
|
|
68
|
-
| list_get | ✅ |
|
|
69
|
-
| list_clear | ✅ |
|
|
60
|
+
| list_set | ✅ | ❌ | ✅ | ✅ | Redis、CacheBase和Memory均与Redis行为完全一致 |
|
|
61
|
+
| list_add | ✅ | ❌ | ✅ | ✅ | Redis、CacheBase和Memory均与Redis行为完全一致 |
|
|
62
|
+
| list_has | ✅ | ❌ | ✅ | ✅ | Redis、CacheBase和Memory均与Redis行为完全一致 |
|
|
63
|
+
| list_get | ✅ | ❌ | ✅ | ✅ | Redis、CacheBase和Memory均与Redis行为完全一致,支持范围获取 |
|
|
64
|
+
| list_clear | ✅ | ❌ | ✅ | ✅ | Redis、CacheBase和Memory均支持,保持过期时间 |
|
|
70
65
|
|
|
71
66
|
## 兼容性报告总结
|
|
72
67
|
|
|
73
|
-
|
|
68
|
+
基于实际功能测试,以下是四种缓存方式的兼容性报告:
|
|
74
69
|
|
|
75
70
|
| 方法类别 | CacheBase | Redis | MongoDB | Memory | 状态说明 |
|
|
76
71
|
|---------|-----------|-------|---------|--------|----------|
|
|
77
|
-
| 基础键值操作 | ✅ | ✅ | ✅ | ✅ |
|
|
78
|
-
| 数组操作 |
|
|
79
|
-
| 过期时间操作 | ✅ | ✅ | ✅ | ✅ |
|
|
80
|
-
| 原子递增操作 | ✅ | ✅ |
|
|
81
|
-
| 批量操作 | ✅ | ✅ | ✅ | ✅ |
|
|
82
|
-
| 哈希表基本操作 |
|
|
83
|
-
| 哈希表批量操作 |
|
|
84
|
-
| 集合操作 |
|
|
85
|
-
| 字符串操作 | ✅ | ✅ |
|
|
86
|
-
| 类型检测 |
|
|
87
|
-
| 键重命名 |
|
|
88
|
-
| 清理操作 | ✅ | ✅ | ✅ | ✅ |
|
|
72
|
+
| 基础键值操作 | ✅ | ✅ | ✅ | ✅ | 所有方式均与Redis行为完全一致 |
|
|
73
|
+
| 数组操作 | ✅ | ✅ | ❌ | ✅ | Redis、CacheBase和Memory完全支持,MongoDB不支持 |
|
|
74
|
+
| 过期时间操作 | ✅ | ✅ | ✅ | ✅ | 基本过期时间操作支持,但MongoDB不支持persist |
|
|
75
|
+
| 原子递增操作 | ✅ | ✅ | ⚠️ | ✅ | incr和decr都支持,MongoDB不支持decr |
|
|
76
|
+
| 批量操作 | ✅ | ✅ | ✅ | ✅ | 所有方式均与Redis行为完全一致 |
|
|
77
|
+
| 哈希表基本操作 | ✅ | ✅ | ✅ | ✅ | 基本操作均支持 |
|
|
78
|
+
| 哈希表批量操作 | ❌ | ✅ | ✅ | ❌ | Redis和MongoDB支持,其他方式不支持 |
|
|
79
|
+
| 集合操作 | ❌ | ✅ | ⚠️ | ❌ | Redis完整支持,MongoDB支持部分方法,其他方式不支持 |
|
|
80
|
+
| 字符串操作 | ✅ | ✅ | ❌ | ⚠️ | Redis和CacheBase支持,Memory部分支持,MongoDB不支持 |
|
|
81
|
+
| 类型检测 | ❌ | ❌ | ❌ | ❌ | 所有方式都不支持 |
|
|
82
|
+
| 键重命名 | ❌ | ❌ | ❌ | ❌ | 所有方式都不支持 |
|
|
83
|
+
| 清理操作 | ✅ | ✅ | ✅ | ✅ | clear操作正常工作 |
|
|
89
84
|
|
|
90
85
|
### 测试统计
|
|
91
86
|
|
|
92
|
-
- **总测试用例**:
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
- **清理操作**:clear
|
|
108
|
-
- **数组操作**:list_set, list_add, list_has, list_get, list_clear (通过通用实现)
|
|
109
|
-
|
|
110
|
-
### CacheBase 缓存方式:
|
|
111
|
-
- **测试状态**:✅ 所有12个方法类别测试通过
|
|
112
|
-
- **兼容性**:完全兼容Redis接口
|
|
113
|
-
- **返回值**:所有操作都返回符合预期的结果
|
|
114
|
-
- **优点**:无需外部依赖,性能优秀,返回值一致性高,支持持久化
|
|
115
|
-
|
|
116
|
-
### MongoDB 缓存方式:
|
|
117
|
-
- **测试状态**:✅ 所有12个方法类别测试通过
|
|
118
|
-
- **兼容性**:完全兼容Redis接口
|
|
119
|
-
- **返回值**:所有操作都返回正确的结果,包括incr/decr返回数值,mget返回正确的结果数组
|
|
120
|
-
- **优点**:支持持久化存储,重启后数据不会丢失
|
|
121
|
-
|
|
122
|
-
### Redis 缓存方式:
|
|
123
|
-
- **测试状态**:✅ 所有12个方法类别测试通过
|
|
124
|
-
- **通过率**:100%
|
|
125
|
-
- **优点**:支持持久化存储,重启后数据不会丢失,支持分布式缓存
|
|
126
|
-
- **注意事项**:已修复认证配置问题,现在可以正常使用
|
|
127
|
-
|
|
128
|
-
### Memory 缓存方式:
|
|
129
|
-
- **测试状态**:✅ 所有12个方法类别测试通过
|
|
130
|
-
- **兼容性**:完全兼容Redis接口
|
|
131
|
-
- **优点**:最高性能,纯内存操作,无I/O开销
|
|
132
|
-
- **缺点**:不支持持久化,程序重启后数据会丢失
|
|
133
|
-
|
|
134
|
-
### 已确认移除的方法:
|
|
135
|
-
- hexists:测试中报错 "TypeError: cache.hexists is not a function"
|
|
136
|
-
- hkeys、hvals:已移除
|
|
137
|
-
|
|
138
|
-
## 最佳使用建议
|
|
139
|
-
|
|
140
|
-
1. **Memory 方式**(推荐用于内存临时缓存):
|
|
141
|
-
- 所有功能完全兼容,返回值符合预期
|
|
142
|
-
- 性能最优,纯内存操作无I/O开销
|
|
143
|
-
- 适合短期缓存、临时数据缓存场景
|
|
144
|
-
- 不需要额外的外部服务依赖
|
|
145
|
-
- 程序重启后数据会丢失
|
|
146
|
-
|
|
147
|
-
2. **CacheBase 方式**(推荐用于单机持久化缓存):
|
|
148
|
-
- 所有功能完全兼容,返回值符合预期
|
|
149
|
-
- 性能稳定,在多次依赖更新中保持一致表现
|
|
150
|
-
- 适合需要持久化但不需要分布式的场景
|
|
151
|
-
- 不需要额外的外部服务依赖
|
|
152
|
-
- 程序重启后数据不会丢失
|
|
153
|
-
|
|
154
|
-
3. **Redis 方式**(推荐用于分布式持久化缓存):
|
|
155
|
-
- 已完全修复所有兼容性问题
|
|
156
|
-
- 支持分布式缓存,数据可在多实例间共享
|
|
157
|
-
- 适合需要高性能、分布式缓存或Redis特有功能的场景
|
|
158
|
-
- 需要外部Redis服务
|
|
159
|
-
- 程序重启后数据不会丢失
|
|
160
|
-
|
|
161
|
-
4. **MongoDB 方式**(推荐用于已有MongoDB环境的场景):
|
|
162
|
-
- 所有方法均完全兼容Redis接口
|
|
163
|
-
- 所有操作都返回正确的结果,包括incr/decr和mget
|
|
164
|
-
- 适合需要持久化缓存且已有MongoDB环境的场景
|
|
165
|
-
- 提供了数据持久化保障
|
|
166
|
-
- 需要外部MongoDB服务
|
|
167
|
-
- 程序重启后数据不会丢失
|
|
168
|
-
|
|
169
|
-
## 实际使用建议
|
|
170
|
-
|
|
171
|
-
1. **开发环境**:推荐使用Memory或CacheBase,无需额外配置,使用简单
|
|
172
|
-
|
|
173
|
-
2. **生产环境**:
|
|
174
|
-
- 如果需要极致性能且数据不敏感:使用Memory
|
|
175
|
-
- 如果需要单机持久化:使用CacheBase
|
|
176
|
-
- 如果需要高性能、分布式缓存:使用Redis
|
|
177
|
-
- 如果需要缓存持久化且已有MongoDB环境:使用MongoDB
|
|
178
|
-
|
|
179
|
-
3. **跨环境部署**:
|
|
180
|
-
- 可以根据环境配置自动切换缓存方式
|
|
181
|
-
- 所有缓存方式的返回值特性一致,可以放心切换
|
|
182
|
-
|
|
183
|
-
4. **性能考虑**:
|
|
184
|
-
- Memory:纯内存操作,最快但不持久化
|
|
185
|
-
- CacheBase:文件系统操作,性能优秀且支持持久化
|
|
186
|
-
- Redis:网络操作,但性能优秀,支持持久化和分布式
|
|
187
|
-
- MongoDB:网络+磁盘操作,性能相对较低但支持持久化
|
|
188
|
-
|
|
189
|
-
## 兼容性维护建议
|
|
190
|
-
|
|
191
|
-
1. **文档维护**:
|
|
192
|
-
- 更新README.md,明确标注支持的方法和各缓存方式的特点
|
|
193
|
-
|
|
194
|
-
2. **测试维护**:
|
|
195
|
-
- 保留test.js作为标准全面兼容性测试
|
|
196
|
-
- 在发布新版本前运行全面测试
|
|
197
|
-
|
|
198
|
-
3. **错误处理**:
|
|
199
|
-
- 对已移除的方法添加更友好的错误提示
|
|
200
|
-
- 考虑在代码中添加方法兼容性检测
|
|
201
|
-
|
|
202
|
-
注:✅ 完全兼容/功能正常 | ⚠️ 功能正常但有注意事项 | ❌ 不兼容/未实现/已移除
|
|
87
|
+
- **总测试用例**:38个方法
|
|
88
|
+
- **通过数**:不同缓存方式通过数量不同(Redis最多,CacheBase和Memory次之)
|
|
89
|
+
- **整体支持情况**:
|
|
90
|
+
- Redis:支持31个方法,不支持7个,行为不一致0个
|
|
91
|
+
- MongoDB:支持23个方法,不支持15个,行为不一致0个
|
|
92
|
+
- CacheBase:支持31个方法,不支持7个,行为不一致0个
|
|
93
|
+
- Memory:支持30个方法,不支持7个,行为不一致0个
|
|
94
|
+
- **注意事项**:
|
|
95
|
+
1. CacheBase和Memory的行为高度一致,只有strlen方法在Memory中不支持
|
|
96
|
+
2. Redis、CacheBase和Memory在已实现的方法上行为完全一致
|
|
97
|
+
3. MongoDB完全不支持列表操作方法(list_*)
|
|
98
|
+
4. addInt和addStr方法已在基类中添加,Redis支持,MongoDB追加失败,CacheBase和Memory支持
|
|
99
|
+
5. 基础键值操作、批量操作、数组操作在Redis、CacheBase和Memory中表现最佳
|
|
100
|
+
6. 集合操作只有Redis完整支持
|
|
101
|
+
7. 所有已实现方法在Redis、CacheBase和Memory中具有完全一致的行为和返回值
|