

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 数据密钥缓存
<a name="data-key-caching"></a>

*数据密钥缓存* 将[数据密钥](concepts.md#DEK)和[相关的加密材料](data-caching-details.md#cache-entries)存储在缓存中。加密或解密数据时，会在缓存中 AWS Encryption SDK 查找匹配的数据密钥。如果找到匹配项，它就使用缓存的数据密钥，而不是生成新的密钥。数据密钥缓存可以提高性能、降低成本，并且可以帮助您在应用程序扩展时保持在服务限制内。

在以下情况下，您的应用程序可以从数据密钥缓存中受益：
+ 应用程序可以重用数据密钥。
+ 应用程序生成大量数据密钥。
+ 您的加密操作过于缓慢、成本高、受限制或消耗大量资源。

缓存可以减少您对加密服务的使用，例如 AWS Key Management Service (AWS KMS)。如果您已达到[AWS KMS requests-per-second极限](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second)，缓存可以提供帮助。您的应用程序可以使用缓存的密钥来处理您的某些数据密钥请求，而不必调用 AWS KMS。（您还可以在 [AWS Support Center](https://console.aws.amazon.com/support/home#/) 中创建一个案例以提高您账户的限制。）

可 AWS Encryption SDK 帮助您创建和管理数据密钥缓存。该工具包提供一个[本地缓存](data-caching-details.md#simplecache)和[缓存加密材料管理器](data-caching-details.md#caching-cmm)（缓存 CMM），以便与缓存交互并实施您设置的[安全阈值](thresholds.md)。这些组件配合使用可以帮助您从重用数据密钥获得的高效率中受益，同时保持系统的安全性。

数据密钥缓存是的一项可选功能 AWS Encryption SDK ，您应谨慎使用。默认情况下，会为每个加密操作 AWS Encryption SDK 生成一个新的数据密钥。这种方法支持加密最佳实践，该最佳实践不建议过度重用数据密钥。通常，只有在需要满足性能目标时，才应使用数据密钥缓存。此外，还应使用数据密钥缓存[安全阈值](thresholds.md)，以确保您使用满足成本和性能目标所需的最小缓存量。

版本 3。 *x* AWS Encryption SDK for Java 仅支持带有传统主密钥提供程序接口的缓存 CMM，不支持密钥环接口。但是，版本 4。 .NET 的 * AWS Encryption SDK x* 及更高版本，版本 3。 的 *x* AWS Encryption SDK for Java，版本 4。 的 *x* AWS Encryption SDK for Python，版本 1。 Rust 和 0.1 版本的 *x*。 AWS Encryption SDK *x* 或更高版本的 fo AWS Encryption SDK r Go 支持[AWS KMS 分层密钥环](use-hierarchical-keyring.md)，这是一种替代的加密材料缓存解决方案。使用 AWS KMS 分层密钥环加密的内容只能使用分层密钥环进行解 AWS KMS 密。

有关这些安全折衷方案的详细讨论，请参阅 AWS 安全博客中的 [AWS Encryption SDK: How to Decide if Data Key Caching is Right for Your Application](https://aws.amazon.com/blogs/security/aws-encryption-sdk-how-to-decide-if-data-key-caching-is-right-for-your-application/)。

**Topics**
+ [如何使用数据密钥缓存](implement-caching.md)
+ [设置缓存安全阈值](thresholds.md)
+ [数据密钥缓存详细信息](data-caching-details.md)
+ [数据密钥缓存示例](sample-cache-example.md)