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

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Bạn có thể sử dụng các chính sách để lưu trữ dữ liệu trong bộ nhớ đệm đa năng 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 được lưu vào bộ nhớ đệm trong thời gian chạy:

Các chính sách này được thiết kế để lưu vào bộ nhớ đệm dữ liệu chung 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 ra 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 nhằm sử dụng lại trên nhiều lệnh gọi đi.

Mỗi loại chính sách được xác định bằng một giản đồ XML (.xsd). Để tham khảo, bạn có thể xem các giản đồ chính sách 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 sẽ đượ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 sẵn bộ nhớ đệm

Sử dụng chính sách PopulateCache để ghi dữ liệu vào bộ nhớ đệm. Ví dụ này ghi mã truy cập OAuth vào bộ nhớ đệm. Để biết thông tin tham khảo về chính sách, hãy xem Chính sách về việc điền sẵn vào 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 sẵn theo chính sách hoặc theo mã. Biến Source trong ví dụ này được điền sẵn bằng lệnh gọi JavaScript sau đây: context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

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

Tra cứu dữ liệu được lưu vào bộ nhớ đệm

Bạn có thể truy xuất các giá trị được lưu vào bộ nhớ đệm bằng chính sách LookupCache. Chính sách LookupCache sau đây đọ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 về chính sách, hãy xem chính sách LookupCache.

<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ể huỷ bộ nhớ đệm một cách rõ ràng bằng cách chỉ định một tiêu đề HTTP. Khi nhận được một yêu cầu có chứa tiêu đề HTTP đã chỉ định, bộ nhớ đệm sẽ bị xoá. Để biết thông tin tham khảo về chính sách, hãy xem chính sách 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>