Chính sách điền sẵn vào bộ nhớ đệm

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

Định cấu hình cách ghi các giá trị được lưu vào bộ nhớ đệm tại thời gian chạy.

Chính sách Điền vào bộ nhớ đệm được thiết kế để ghi các mục vào bộ nhớ đệm đa năng trong thời gian ngắn. Chính sách này được dùng kết hợp với chính sách Tra cứu bộ nhớ đệm (để đọc các mục trong bộ nhớ đệm) và chính sách Vô hiệu hoá bộ nhớ đệm (để vô hiệu hoá các mục).

Để lưu vào bộ nhớ đệm các phản hồi của tài nguyên phụ trợ, hãy xem chính sách Bộ nhớ đệm phản hồi.

Tài liệu tham khảo về phần tử

Sau đây là danh sách các phần tử mà bạn có thể định cấu hình trên chính sách này.

<PopulateCache async="false" continueOnError="false" enabled="true" name="Populate-Cache-1">
    <DisplayName>Populate Cache 1</DisplayName>
    <Properties/>
    <CacheKey>
        <Prefix/>
        <KeyFragment ref=""/>
    </CacheKey>
    <!-- Omit this element if you're using the included shared cache. -->
    <CacheResource/>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
        <TimeoutInSeconds>300</TimeoutInSeconds>
    </ExpirySettings>
    <Source>flowVar</Source>
</PopulateCache>

Thuộc tính <PopulateCache>

Bảng sau đây mô tả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:

Thuộc tính Mô tả Mặc định Sự hiện diện
name

Tên nội bộ của chính sách. Giá trị của thuộc tính name có thể chứa chữ cái, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

(Không bắt buộc) Bạn có thể dùng phần tử <DisplayName> để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên ngôn ngữ tự nhiên khác.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi chính sách không thành công. Điều này là dự kiến đối với hầu hết các chính sách.

Đặt thành true để tiếp tục thực thi luồng ngay cả sau khi có chính sách không thành công.

false Không bắt buộc
enabled

Hãy đặt thành true để thực thi chính sách này.

Đặt thành false để tắt chính sách này. Chính sách này sẽ không được thực thi ngay cả khi luồng đó vẫn được liên kết với một luồng.

đúng Không bắt buộc
async

Thuộc tính này không được dùng nữa.

false Không được dùng nữa

&lt;DisplayName&gt; phần tử

Hãy sử dụng cùng với thuộc tính name để gắn nhãn chính sách trong phần trình chỉnh sửa proxy giao diện người dùng quản lý có tên ngôn ngữ tự nhiên khác.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính name của chính sách sẽ là đã sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

Phần tử <CacheKey>

Định cấu hình một con trỏ duy nhất cho một phần dữ liệu được lưu trữ trong bộ nhớ đệm.

Khoá bộ nhớ đệm có kích thước tối đa là 2 KB.

<CacheKey>
    <Prefix>string</Prefix>
    <KeyFragment ref="variable_name" />
    <KeyFragment>literal_string</KeyFragment>
</CacheKey>

Mặc định:

Không áp dụng

Trạng thái hiện diện:

Bắt buộc

Loại:

Không áp dụng

<CacheKey> tạo tên cho từng phần dữ liệu được lưu trữ trong bộ nhớ đệm.

Trong thời gian chạy, các giá trị <KeyFragment> được thêm vào trước bằng giá trị phần tử <Scope> hoặc giá trị <Prefix>. Ví dụ: kết quả sau đây sẽ tạo ra một khoá lưu vào bộ nhớ đệm là UserToken__apiAccessToken__<value_of_client_id>:

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

Bạn sử dụng phần tử <CacheKey> cùng với <Prefix><Scope>. Để biết thêm thông tin, hãy xem phần Xử lý khoá bộ nhớ đệm.

Phần tử <CacheResource>

Chỉ định bộ nhớ đệm nơi lưu trữ thư.

Bỏ hoàn toàn phần tử này nếu chính sách này (và các chính sách LookupCache và InvalidateCache tương ứng) đang sử dụng bộ nhớ đệm dùng chung đi kèm.

<CacheResource>cache_to_use</CacheResource>

Mặc định:

Không áp dụng

Trạng thái hiện diện:

Không bắt buộc

Loại:

Chuỗi

Để biết thêm thông tin về cách định cấu hình bộ nhớ đệm, hãy xem phần Tạo và chỉnh sửa bộ nhớ đệm môi trường.

Phần tử <CacheKey>/<KeyFragment>

Chỉ định một giá trị cần được đưa vào khoá bộ nhớ đệm, tạo một không gian tên để so khớp các yêu cầu với các phản hồi được lưu vào bộ nhớ đệm.

<KeyFragment ref="variable_name"/>
<KeyFragment>literal_string</KeyFragment>

Mặc định:

Không áp dụng

Trạng thái hiện diện:

Không bắt buộc

Loại:

Không áp dụng

Đây có thể là một khoá (tên tĩnh mà bạn cung cấp) hoặc một giá trị (một mục nhập động do bạn đặt bằng cách tham chiếu đến một biến). Tất cả các đoạn được chỉ định kết hợp (cộng với tiền tố) được nối để tạo khoá bộ nhớ đệm.

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

Bạn sử dụng phần tử <KeyFragment> cùng với <Prefix><Scope>. Để biết thêm thông tin, hãy xem phần Xử lý khoá bộ nhớ đệm.

Thuộc tính

Thuộc tính Loại Mặc định Bắt buộc Mô tả
ref chuỗi Không

Biến mà bạn muốn lấy giá trị. Không nên dùng nếu phần tử này chứa một giá trị theo nghĩa đen.

Phần tử <CacheKey>/<Prefix>

Chỉ định một giá trị để dùng làm tiền tố khoá bộ nhớ đệm.

<Prefix>prefix_string</Prefix>

Mặc định:

Không áp dụng

Trạng thái hiện diện:

Không bắt buộc

Loại:

Chuỗi

Hãy sử dụng giá trị này thay vì <Scope> khi bạn muốn chỉ định giá trị của riêng mình thay vì giá trị được liệt kê <Scope>. Nếu được xác định, <Prefix> sẽ thêm giá trị khoá của bộ nhớ đệm vào các mục được ghi vào bộ nhớ đệm. Giá trị phần tử <Prefix> sẽ thay thế giá trị phần tử <Scope>.

Bạn sử dụng phần tử <Prefix> cùng với <CacheKey><Scope>. Để biết thêm thông tin, hãy xem phần Xử lý khoá bộ nhớ đệm.

Phần tử <ExpirySettings>

Chỉ định thời điểm một mục trong bộ nhớ đệm sẽ hết hạn. Khi có mặt, <TimeoutInSeconds> sẽ ghi đè cả <TimeOfDay><ExpiryDate>.

<ExpirySettings>
  <!-- use exactly one of the following child elements -->
  <TimeoutInSeconds ref="duration_variable">seconds_until_expiration</TimeoutInSeconds>
  <ExpiryDate ref="date_variable">expiration_date</ExpiryDate>
  <TimeOfDay ref="time_variable">expiration_time</TimeOfDay>
</ExpirySettings>

Mặc định:

Không áp dụng

Trạng thái hiện diện:

Bắt buộc

Loại:

Không áp dụng

Phần tử con của <ExpirySettings>

Chỉ sử dụng một phần tử con. Bảng sau đây mô tả các phần tử con của <ExpirySettings>:

Phần tử con Mô tả
<TimeoutInSeconds>

Số giây sau đó một mục trong bộ nhớ đệm sẽ hết hạn.

<ExpirySettings>
  <TimeoutInSeconds ref="var-containing-duration">expiry</TimeoutInSeconds>
</ExpirySettings>

Phần tử này thay thế phần tử TimeoutInSec hiện không dùng nữa.

<ExpiryDate>

Chỉ định ngày mà một mục trong bộ nhớ đệm sẽ hết hạn. Chỉ định một chuỗi ở dạng mm-dd-yyyy.

<ExpirySettings>
  <ExpiryDate ref="var-containing-date">expiry</ExpiryDate>
</ExpirySettings>

Nếu ngày được chỉ định là ngày trong quá khứ, chính sách sẽ áp dụng thời gian tồn tại tối đa cho mục trong bộ nhớ đệm. Thời gian tối đa là 30 ngày.

<TimeOfDay>

Chỉ định thời gian trong ngày mà một mục trong bộ nhớ đệm sẽ hết hạn. Chỉ định một chuỗi ở dạng HH:mm:ss, trong đó HH biểu thị giờ theo đồng hồ 24 giờ, theo múi giờ UTC. Ví dụ: 14:30:00 có nghĩa là 2:30 chiều.

<ExpirySettings>
  <TimeOfDay ref="var-containing-time">expiry</TimeOfDay>
</ExpirySettings>

Bạn chỉ nên chỉ định một trong các phần tử con có thể có. Nếu bạn chỉ định nhiều phần tử, thứ tự ưu tiên là:TimeoutInSeconds, ExpiryDate, TimeOfDay.

Với mỗi phần tử con nêu trên của <ExpirySettings>, nếu bạn chỉ định thuộc tính ref không bắt buộc trên phần tử con, thì chính sách sẽ truy xuất giá trị hết hạn từ biến ngữ cảnh được đặt tên. Nếu bạn không xác định biến, chính sách sẽ sử dụng giá trị văn bản theo nghĩa đen của phần tử con.

Phần tử <Scope>

Liệt kê dùng để tạo tiền tố cho khoá bộ nhớ đệm khi phần tử <Prefix> không được cung cấp trong phần tử <CacheKey>.

<Scope>scope_enumeration</Scope>

Mặc định:

"Độc quyền"

Trạng thái hiện diện:

Không bắt buộc

Loại:

Chuỗi

Chế độ cài đặt <Scope> xác định một khoá bộ nhớ đệm được thêm vào theo giá trị <Scope>. Ví dụ: khoá lưu vào bộ nhớ đệm sẽ có dạng sau khi phạm vi được đặt thành Exclusive:

orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__ [ serializedCacheKey ]

Nếu phần tử <Prefix> xuất hiện trong <CacheKey>, thì phần tử này sẽ thay thế giá trị của phần tử <Scope>. Các giá trị hợp lệ bao gồm các giá trị liệt kê bên dưới.

Bạn sử dụng phần tử <Scope> cùng với <CacheKey><Prefix>. Để biết thêm thông tin, hãy xem phần Xử lý khoá bộ nhớ đệm.

Giá trị được chấp nhận

Global

Khoá lưu vào bộ nhớ đệm được chia sẻ trên tất cả các proxy API được triển khai trong môi trường. Khoá lưu vào bộ nhớ đệm được thêm vào ở dạng orgName __ envName __.

Nếu bạn xác định một mục nhập <CacheKey> bằng <KeyFragment> apiAccessToken và một phạm vi <Global>, thì mỗi mục nhập sẽ được lưu trữ dưới dạng orgName__envName__apiAccessToken, theo sau là giá trị được chuyển đổi tuần tự của mã truy cập. Đối với một proxy API được triển khai trong môi trường có tên là "test" trong một tổ chức có tên là "apifactory", mã truy cập sẽ được lưu trữ theo khoá bộ nhớ đệm sau: apifactory__test__apiAccessToken.

Application

Tên của proxy API được dùng làm tiền tố.

Khoá bộ nhớ đệm được thêm vào dưới dạng orgName__envName__apiProxyName.

Proxy

Cấu hình ProxyEndpoint được dùng làm tiền tố.

Khoá bộ nhớ đệm được thêm vào dưới dạng orgName__envName__apiProxyName__deployedRevisionNumber__proxyEndpointName .

Target

Cấu hình TargetEndpoint được dùng làm tiền tố.

Khoá lưu vào bộ nhớ đệm được thêm vào ở dạng orgName__envName__apiProxyName__deployedRevisionNumber__targetEndpointName .

Exclusive

Mặc định. Đây là cách cụ thể nhất và do đó, giảm thiểu nguy cơ xảy ra xung đột không gian tên trong một bộ nhớ đệm nhất định.

Tiền tố có một trong hai dạng sau:

  • Nếu chính sách được đính kèm vào luồng ProxyEndpoint, thì tiền tố sẽ có dạng ApiProxyName_ProxyEndpointName.
  • Nếu chính sách được đính kèm tại TargetEndpoint, thì tiền tố sẽ có dạng ApiProxyName_TargetName.

Khoá lưu vào bộ nhớ đệm được thêm vào ở dạng orgName__envName__apiProxyName__deployedRevisionNumber__proxyNameITargetName

Ví dụ: chuỗi đầy đủ có thể trông như sau:

apifactory__test__weatherapi__16__default__apiAccessToken
.

Phần tử <Source>

Chỉ định biến có giá trị cần được ghi vào bộ nhớ đệm.

<Source>source_variable</Source>

Mặc định:

Không áp dụng

Trạng thái hiện diện:

Bắt buộc

Loại:

Chuỗi

Lưu ý về cách sử dụng

Sử dụng chính sách này cho mục đích lưu vào bộ nhớ đệm chung. Trong thời gian chạy, chính sách <PopulateCache> sẽ ghi dữ liệu từ biến mà bạn đã chỉ định trong phần tử <Source> vào bộ nhớ đệm mà bạn đã chỉ định trong phần tử <CacheResource>. Bạn có thể sử dụng các phần tử <CacheKey>, <Scope><Prefix> để chỉ định một khoá mà bạn có thể sử dụng từ chính sách <LookupCache> để truy xuất giá trị. Sử dụng phần tử <ExpirySettings> để định cấu hình thời điểm giá trị được lưu vào bộ nhớ đệm sẽ hết hạn.

Tính năng lưu vào bộ nhớ đệm cho mục đích chung bằng chính sách PopulateCache, chính sách LookupCachechính sách InvalidateCache sử dụng bộ nhớ đệm mà bạn định cấu hình hoặc bộ nhớ đệm dùng chung được đưa vào theo mặc định. Trong hầu hết các trường hợp, bộ nhớ đệm dùng chung cơ bản sẽ đáp ứng nhu cầu của bạn. Để sử dụng bộ nhớ đệm này, bạn chỉ cần bỏ qua phần tử <CacheResource>.

Giới hạn bộ nhớ đệm: Nhiều giới hạn bộ nhớ đệm được áp dụng, chẳng hạn như kích thước tên và giá trị, tổng số bộ nhớ đệm, số lượng mục trong bộ nhớ đệm và thời gian hết hạn.

Để biết thêm về kho dữ liệu cơ bản, hãy xem bài viết Cấu trúc bộ nhớ đệm. Để biết thêm thông tin về cách định cấu hình bộ nhớ đệm, hãy xem phần Tạo và chỉnh sửa bộ nhớ đệm môi trường.

Giới thiệu về tính năng mã hoá bộ nhớ đệm

Edge for Public Cloud: Bộ nhớ đệm chỉ được mã hoá trong các tổ chức có hỗ trợ PCIHIPAA. Hoạt động mã hoá cho những tổ chức đó được định cấu hình trong quá trình cung cấp tổ chức.

Mã lỗi

Phần này mô tả các mã lỗi và thông báo lỗi được trả về cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này rất quan trọng nếu bạn đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem bài viết Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi chính sách này thực thi.

Mã lỗi Trạng thái HTTP Xảy ra khi
policies.populatecache.EntryCannotBeCached 500 Không thể lưu mục nhập vào bộ nhớ đệm. Đối tượng thông báo đang được lưu vào bộ nhớ đệm không phải là một thực thể của có thể chuyển đổi tuần tự.

Lỗi triển khai

Những lỗi này có thể xảy ra khi bạn triển khai proxy có chứa chính sách này.

Tên lỗi Nguyên nhân Khắc phục
InvalidCacheResourceReference Lỗi này xảy ra nếu bạn đặt phần tử <CacheResource> trong chính sách FillCache thành tên không tồn tại trong môi trường nơi proxy API đang được triển khai.
CacheNotFound Bộ nhớ đệm được chỉ định trong phần tử <CacheResource> không đã tồn tại.

Biến lỗi

Các biến này được đặt khi chính sách này kích hoạt lỗi. Để biết thêm thông tin, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách.

Biến Trong đó Ví dụ:
fault.name="fault_name" fault_name là tên của lỗi, như được liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. fault.name = "EntryCannotBeCached"
populatecache.policy_name.failed policy_name là tên do người dùng chỉ định của chính sách gây ra lỗi. populatecache.POP-CACHE-1.failed = true

Ví dụ về phản hồi khi gặp lỗi

{
  "fault": {
    "faultstring": "[entry] can not be cached. Only serializable entries are cached.",
    "detail": {
      "errorcode": "steps.populatecache.EntryCannotBeCached"
    }
  }
}

Ví dụ về quy tắc lỗi

<FaultRule name="Populate Cache Fault">
    <Step>
        <Name>AM-EntryCannotBeCached</Name>
        <Condition>(fault.name Matches "EntryCannotBeCached") </Condition>
    </Step>
    <Condition>(populatecache.POP-CACHE-1.failed = true) </Condition>
</FaultRule>