11.4. java.util.concurrent.ConcurrentMap 和 javax.cache.Cache API 的比较
以下是 java.util.concurrent.ConcurrentMap 和 javax.cache.Cache API 提供的数据操作 API 的简要比较。
| 操作 | java.util.concurrent.ConcurrentMap<K, V> | javax.cache.Cache<K, V> |
|---|---|---|
| 存储且没有返回 | 不适用 |
|
| 存储和返回之前的值 |
|
|
| 如果不存在存储 |
|
|
| 检索 |
|
|
| 如果存在删除 |
|
|
| 删除并返回之前的值 |
|
|
| 删除条件 |
|
|
| 如果存在,替换 |
|
|
| 替换并返回之前的值 |
|
|
| 替换条件 |
|
|
比较两个 API,最好看到:在可能的情况下,JCache 避免返回之前的值以避免操作昂贵的网络或 IO 操作。这是 JCache API 设计中的覆盖原则。实际上,java.util.concurrent.ConcurrentMap 中存在一组操作,但没有出现在 javax.cache.Cache 中,因为它们在分布式缓存中进行计算的成本。唯一的例外是迭代缓存的内容:
| 操作 | java.util.concurrent.ConcurrentMap<K, V> | javax.cache.Cache<K, V> |
|---|---|---|
| 计算缓存的大小 |
| 不适用 |
| 返回缓存中的所有密钥 |
| 不适用 |
| 返回缓存中的所有值 |
| 不适用 |
| 返回缓存中的所有条目 |
| 不适用 |
| 迭代缓存 |
在 keySet、value 或 entrySet 上使用 |
|