

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Java 搭配用戶端快取取得 Secrets Manager 秘密值
<a name="retrieving-secrets_cache-java"></a>

擷取秘密時，您可以使用 Secrets Manager Java 型快取元件進行快取以供將來使用。擷取快取的秘密比從 Secrets Manager 中擷取要快。由於呼叫 Secrets Manager API 需要花費成本，因此使用快取可以降低成本。如需您可以擷取機密的所有方法，請參閱 [取得秘密](retrieving-secrets.md)。

快取政策是「最近最少使用的 (LRU)」，因此當快取必須丟棄秘密時，其會丟棄最近最少使用的秘密。預設情況下，快取每小時重新整理一次秘密。您可以設定在快取中[重新整理機密的頻率](retrieving-secrets_cache-java-ref_SecretCacheConfiguration.md#retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-getCacheItemTTL)，並可以[掛接到機密擷取](retrieving-secrets_cache-java-ref_SecretCacheHook.md)以新增更多功能。

一旦釋放快取參考，快取不會強制執行垃圾回收。快取實作不包括快取失效。快取實作著重於快取本身，而不是強化或著重於安全性。如果您需要額外的安全性，例如加密快取中的項目，請使用提供的介面和抽象方法。

若要使用元件，您必須擁有下列項目：
+ Java 8 或更高版本的開發環境。請參閱 Oracle 網站上的 [Java SE 下載](https://www.oracle.com/technetwork/java/javase/downloads/index.html)。

若要下載開放程式碼，請參閱 [Secrets Manager Java 型快取用戶端元件](https://github.com/aws/aws-secretsmanager-caching-java) (在 GitHub 上)。

要將元件新增至您的專案中，請在 Maven pom.xml 檔案中包含以下相依性。如需 Maven 的詳細資訊，請參閱 Apache Maven 專案網站上的[入門指南](https://maven.apache.org/guides/getting-started/index.html)。

```
<dependency>
  <groupId>com.amazonaws.secretsmanager</groupId>
  <artifactId>aws-secretsmanager-caching-java</artifactId>
  <version>1.0.2</version>
</dependency>
```

**必要許可：**
+ `secretsmanager:DescribeSecret`
+ `secretsmanager:GetSecretValue`

如需詳細資訊，請參閱[許可參考](auth-and-access.md#reference_iam-permissions)。

**Topics**
+ [SecretCache](retrieving-secrets_cache-java-ref_SecretCache.md)
+ [SecretCacheConfiguration](retrieving-secrets_cache-java-ref_SecretCacheConfiguration.md)
+ [SecretCacheHook](retrieving-secrets_cache-java-ref_SecretCacheHook.md)

**Example 擷取秘密**  
下列程式碼範例顯示擷取秘密字串的 Lambda 函數。它遵循將函數處理常式之外的快取執行個體化的[最佳實務](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)，所以如果您再次呼叫 Lambda 函數，則不會繼續呼叫 API。  

```
package com.amazonaws.secretsmanager.caching.examples;
    
    import com.amazonaws.services.lambda.runtime.Context;
    import com.amazonaws.services.lambda.runtime.RequestHandler;
    import com.amazonaws.services.lambda.runtime.LambdaLogger;
    
    import com.amazonaws.secretsmanager.caching.SecretCache;
    
    public class SampleClass implements RequestHandler<String, String> {
    
         private final SecretCache cache  = new SecretCache();
    
         @Override public String handleRequest(String secretId,  Context context) {
             final String secret  = cache.getSecretString(secretId);
    
            {{// Use the secret, return success;}}
    
        }
    }
```