Ví dụ: Lưu vào bộ nhớ đệm đa năng

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Bạn có thể dùng chính sách để lưu trữ dữ liệu trong bộ nhớ đệm cho mục đích chung nhằm truy xuất nhanh hơn. Bằng cách sử dụng các chính sách sau, proxy của bạn có thể lưu trữ và truy xuất dữ liệu đã lưu vào bộ nhớ đệm trong thời gian chạy:

Những chính sách này được thiết kế cho việc lưu trữ chung dữ liệu vào bộ nhớ đệm mà các proxy của bạn sử dụng.

Mã mẫu trong chủ đề này dựa trên proxy mẫu OAuth đi trong GitHub (xem Danh sách mẫu). Mẫu này sử dụng chính sách bộ nhớ đệm để lưu trữ mã truy cập OAuth để sử dụng lại cho nhiều lệnh gọi đi.

Mỗi loại chính sách được xác định bằng một lược đồ XML (.cây). Để tham khảo, lược đồ chính sách có trên GitHub.

Trong ví dụ sau, mã truy cập OAuth được ghi vào bộ nhớ đệm bằng chính sách PopulateCache. Mã thông báo OAuth được truy xuất cho các yêu cầu tiếp theo bằng chính sách LookupCache. Sau khi mã truy cập hết hạn, JavaScript được dùng để truy xuất mã truy cập mới. Mã này sẽ được lưu vào bộ nhớ đệm theo chính sách PopulateCache.

Điền vào bộ nhớ đệm

Dùng chính sách PopulateCache để ghi dữ liệu vào bộ nhớ đệm. Ví dụ này ghi một mã truy cập OAuth vào bộ nhớ đệm. Để biết thông tin tham khảo chính sách, hãy xem Chính sách điền sẵn bộ nhớ đệm.

<PopulateCache name="token-cache">
    <!-- The cache to write to. -->
    <CacheResource>mycache</CacheResource>
    <!-- The source of the data, a variable containing the value. -->
    <Source>twitter-translate.apiAccessToken</Source>
    <!-- An enumeration representing a prefix for namespace scope. -->
    <Scope>Exclusive</Scope>
    <!-- A unique pointer (a flow variable value) to the data. Use this later to retrieve it. -->
    <CacheKey>
        <KeyFragment>apiAccessToken</KeyFragment>
        <KeyFragment ref="request.queryparam.client_id"></KeyFragment>
    </CacheKey>
    <!-- Entries placed into the cache with this policy will expire after 600 seconds. -->
    <ExpirySettings>
        <TimeoutInSec>600</TimeoutInSec>
    </ExpirySettings>
</PopulateCache>

Các biến có thể được điền theo chính sách hoặc bằng mã. Biến Source trong ví dụ này được điền sẵn bởi lệnh gọi JavaScript sau: context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Để biết thêm thông tin về khoá bộ nhớ đệm, hãy xem bài viết Xử lý khoá bộ nhớ đệm.

Tra cứu dữ liệu đã lưu trong bộ nhớ đệm

Bạn có thể truy xuất các giá trị đã lưu vào bộ nhớ đệm bằng chính sách LookupCache. Chính sách LookupCache sau đây sẽ đọc một giá trị từ mycache và ghi giá trị đó vào biến twitter-translate.apiAccessToken. Để biết thông tin tham khảo chính sách, hãy xem chính sách TraCache.

<LookupCache name="token-cache">
    <!-- The cache to read from. -->
    <CacheResource>mycache</CacheResource>
    <!-- Where to assign the retrieved value - here, a variable. -->
    <AssignTo>twitter-translate.apiAccessToken</AssignTo>
    <!-- An enumeration representing a prefix for namespace scope. -->
    <Scope>Exclusive</Scope>
    <!-- The unique pointer (a flow variable value) that was used to store the data in the cache. -->

    <CacheKey>
        <KeyFragment>apiAccessToken</KeyFragment>
        <KeyFragment ref="request.queryparam.client_id"></KeyFragment>
    </CacheKey>
</LookupCache>

Vô hiệu hoá bộ nhớ đệm

Bạn có thể vô hiệu hoá bộ nhớ đệm một cách rõ ràng bằng cách chỉ định tiêu đề HTTP. Khi nhận được một yêu cầu chứa tiêu đề HTTP đã chỉ định, bộ nhớ đệm sẽ được kích hoạt. Để biết thông tin tham khảo về chính sách, hãy xem Chính sách về InvalidateCache.

<InvalidateCache name="InvalidateMyCache">
    <!-- The cache to invalidate. -->
    <CacheResource>test-cache</CacheResource>
    <!-- An enumeration representing a prefix for namespace scope. -->
    <Scope>Exclusive</Scope>
    <!-- Fragments constructing the unique pointer used when 
        the data was put into the cache. -->
    <CacheKey>
        <KeyFragment>apiAccessToken</KeyFragment>
        <KeyFragment ref="request.queryparam.client_id" />
    </CacheKey>
    <PurgeChildEntries>true</PurgeChildEntries>
</InvalidateCache>