14.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> |
|---|---|---|
| 存储且没有返回 | N/A |
|
| 存储并返回以前的值 |
|
|
| 如果不存在,则存储 |
|
|
| retrieve |
|
|
| 如果存在,删除 |
|
|
| 删除并返回前面的值 |
|
|
| 删除条件 |
|
|
| 如果存在,替换 |
|
|
| 替换并返回前面的值 |
|
|
| 替换条件 |
|
|
比较两个 API,很明显地发现,在可能的情况下,JCache 避免返回之前的值,以避免操作执行昂贵的网络或 IO 操作。这是 JCache API 设计中的原则。实际上,在 java.util.concurrent.ConcurrentMap 中存在一组操作,但没有存在于 javax.cache.Cache 中,因为它们可能难以在分布式缓存中计算。唯一例外是迭代缓存的内容:
| 操作 | java.util.concurrent.ConcurrentMap<K, V> | javax.cache.Cache<K, V> |
|---|---|---|
| 计算缓存大小 |
| N/A |
| 返回缓存中的所有密钥 |
| N/A |
| 返回缓存中的所有值 |
| N/A |
| 返回缓存中的所有条目 |
| N/A |
| 迭代缓存 |
在 keySet、value 或 entrySet 上使用 |
|