Làm việc với khóa bộ nhớ cache

Bạn đang xem tài liệu về Apigee Edge.
Hãy xem tài liệu về Apigee X.

Khi sử dụng chính sách bộ nhớ đệm, bạn đảm bảo tính riêng biệt của khoá giá trị được lưu vào bộ nhớ đệm bằng cách định cấu hình khoá bộ nhớ đệm. Khóa bộ nhớ cache, cùng với các giá trị khác mà bạn có thể định cấu hình, cung cấp cho bạn một cách đáng tin cậy để có được cùng dữ liệu mà bạn đã đưa vào. Bạn dùng khoá bộ nhớ đệm với chính sách Điền dữ liệu vào bộ nhớ đệm, chính sách Tra cứu bộ nhớ đệm, chính sách Vô hiệu hoá bộ nhớ đệmchính sách Bộ nhớ đệm phản hồi.

Giá trị của các phần tử cấu hình -- <CacheKey>/<KeyFragment>, <Scope><Prefix> -- được nối với nhau để tạo một giá trị nhận dạng liên kết với giá trị bạn đưa vào bộ nhớ đệm. Bạn sử dụng cùng cấu hình này để truy xuất giá trị.

Với các phần tử cấu hình chính sách bộ nhớ cache sau, bạn có thể tạo khóa bộ nhớ cache:

Thành phần cấu hình bộ nhớ đệm Mô tả
<CacheKey>/<KeyFragment> Sử dụng kết hợp <CacheKey> <KeyFragment> phần tử để chỉ định giá trị nhận dạng duy nhất cho các mục trong bộ nhớ đệm. Giá trị KeyFragment có thể là giá trị cố định tĩnh hoặc được đặt trong các biến.
<Scope> hoặc <Prefix> Sử dụng các phần tử <Scope> hoặc <Prefix> để tiếp tục mở khoá bộ nhớ đệm cho không gian tên. <Scope> liệt kê một danh sách các giá trị được xác định trước. Phần tử <Prefix> sẽ ghi đè <Scope> bằng một giá trị do bạn chọn.

Các giá trị này được nối vào biểu mẫu sau, trong đó giá trị <Scope> hoặc <Prefix> được phân tách khỏi giá trị KeyFragment bằng dấu gạch dưới kép. Nhiều giá trị KeyFragment cũng được phân tách bằng dấu gạch dưới kép.

phạm vi | prefix__keyfragment[__keyfragment]

Với chính sách Bộ nhớ đệm của phản hồi, bạn có thể tuỳ ý thêm khoá bộ nhớ đệm này với các giá trị từ tiêu đề Chấp nhận phản hồi.

Sử dụng <CacheKey>

Phần tử <CacheKey> định cấu hình cách Edge sẽ tạo giá trị nhận dạng duy nhất (một khoá) cho mỗi mục bộ nhớ đệm mà tính năng này tạo ra. Khi truy xuất giá trị đã lưu vào bộ nhớ đệm, Edge sẽ sử dụng khóa bộ nhớ đệm để tìm đúng giá trị. Trong chính sách ResponseCache, một cấu hình xác định khoá cho cả hoạt động lưu vào bộ nhớ đệm và truy xuất. Trong các chính sách Điền bộ nhớ đệm và chính sách LookupCache, mỗi chính sách phải có các phần tử <CacheKey> giống hệt nhau để đảm bảo rằng một giá trị được truy xuất từ bộ nhớ đệm tương ứng với giá trị đã đặt tại đó.

Phần tử <CacheKey> có thể bao gồm nhiều phần tử <KeyFragment>. Trong thời gian chạy, các giá trị do các phần tử <KeyFragment> chỉ định được nối bằng hai dấu gạch dưới giữa chúng để tạo thành một phần của khoá bộ nhớ đệm.

Ví dụ: cấu hình sau đây sẽ tạo một giá trị hello__world để sử dụng trong khoá bộ nhớ đệm:

<CacheKey>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>

Bạn cũng có thể sử dụng các giá trị biến trong khoá bộ nhớ đệm bằng cách tham chiếu biến đó trong phần tử <KeyFragment>, như minh hoạ bên dưới:

<KeyFragment ref="variable_name"/>

Ví dụ: để làm cho giá trị khoá bộ nhớ đệm kết hợp Loại Nội dung của thông báo yêu cầu, bạn hãy làm như sau:

<KeyFragment ref="request.header.Content-Type"/>

Trong cấu hình sau, biến request.header.Content-Type có giá trị application/json.

<CacheKey>
  <KeyFragment>apiAccessToken</KeyFragment>
  <KeyFragment ref="request.header.Content-Type" />
  <KeyFragment>bar</KeyFragment>
</CacheKey>

Do đó, khoá bộ nhớ đệm kết thúc bằng apiAccessToken__application/json__bar.

Để biết danh sách các biến mà bạn có thể sử dụng, hãy xem Tài liệu tham khảo về biến.

Khoá bộ nhớ đệm lấy từ tham số truy vấn

Sử dụng các biến như request.queryparam.<queryparam_name> và request.querystring, bạn có thể định cấu hình khóa bộ nhớ cache để khóa bao gồm các phần của chuỗi truy vấn của yêu cầu. Ví dụ: URL sau sử dụng hai tham số truy vấn (param1 và param2) mà bạn có thể sử dụng trong khoá bộ nhớ đệm:

http://myaccount.apigee.net/mydata?param1=value1&param2=value2

Phần tử <CacheKey> có thể kết hợp các giá trị này với một cấu hình, chẳng hạn như sau:

<CacheKey>
    <KeyFragment ref="request.queryparam.param1" />
    <KeyFragment ref="request.queryparam.param2" />
<CacheKey>

Trong thời gian chạy, khoá bộ nhớ đệm sẽ bao gồm các giá trị tham số được nối như sau:

other_key_parts__value1__value2

Xin lưu ý rằng khi bạn sử dụng các biến để chèn giá trị từ các tham số, các giá trị đó sẽ được nối theo thứ tự mà thứ tự phần tử <KeyFragment> đề xuất. Ngoài ra, hãy lưu ý rằng Edge sẽ chỉ sử dụng những giá trị mà bạn tham chiếu cụ thể bằng các phần tử <KeyFragment>. Nếu danh sách tham số yêu cầu của bạn khác nhau, các biến thể sẽ không được tính trong khoá bộ nhớ đệm.

Một phương án thay thế là sử dụng biến request.querystring. Biến này chèn toàn bộ chuỗi tham số làm một phần của khoá bộ nhớ đệm. Hãy nhớ rằng mặc dù phương thức này tính đến tất cả các tham số, nhưng nếu thứ tự của các tham số thay đổi theo yêu cầu của yêu cầu tiếp theo thì khoá sẽ khác nhau. Nói cách khác, param1=value1&param2=value2param2=value2&param1=value1 không dẫn đến cùng một giá trị khoá bộ nhớ đệm.

Để biết danh sách các biến mà bạn có thể sử dụng, hãy xem Tài liệu tham khảo về biến.

Sử dụng <Scope> và <Tiền tố>

Các phần tử <Scope><Prefix> giúp tăng cường khoá với tiền tố không gian tên. Các giá trị mà chúng đại diện được thêm vào khoá bộ nhớ đệm của bạn.

Theo mặc định, phần tử <Scope> được sử dụng. Đây là một bảng liệt kê có các giá trị từ rộng tới hẹp, với hẹp nhất làm giá trị mặc định. Giá trị mặc định này được sử dụng trừ phi bạn chỉ định một giá trị khác hoặc chỉ định giá trị phần tử <Prefix>. Bạn có thể ghi đè giá trị <Scope> bằng cách sử dụng phần tử <Prefix>, đồng thời chỉ định giá trị tùy chỉnh cho khoảng cách tên.

Ví dụ: giá trị <Scope> "Toàn cầu" là phạm vi rộng nhất -- đại diện cho tên tổ chức và môi trường. Vì vậy, nếu proxy của bạn được triển khai trong một tổ chức có tên 'mycompany' và một môi trường có tên 'prod', thì giá trị trước kết quả sẽ là:

Cấu hình Kết quả
<Scope>Global</Scope> mycompany__prod__.

Nếu bạn đang sử dụng Phạm vi toàn cầu với khoá bộ nhớ đệm được xác định ở trên, kết quả sẽ như sau:

Cấu hình Kết quả
<Scope>Global</Scope>
<CacheKey>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>
mycompany__prod__hello__world.

Như đã mô tả trong chính sách LookupCache, bạn có thể định cấu hình phạm vi để tăng mức độ cụ thể từ Toàn cầu lên Độc quyền. Phạm vi Exclusive là phạm vi cụ thể nhất và do đó có ít nguy cơ xảy ra xung đột không gian tên trong một bộ nhớ đệm nhất định. Mỗi mục bộ nhớ đệm có Phạm vi dành riêng là có tiền tố ở dạng sau:

orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__[serializedCacheKey]

Ví dụ: khoá bộ nhớ đệm được tạo từ giá trị dành riêng cho <Scope> sẽ có dạng như sau:

apifactory__test__weatherapi__16__default__apiAccessToken