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

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

Khi sử dụng chính sách bộ nhớ đệm, bạn phải đảm bảo tính duy nhất của các khoá giá trị đã lưu vào bộ nhớ đệm bằng cách định cấu hình khoá bộ nhớ đệm. Khoá bộ nhớ đệm, 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 để lấy chính dữ liệu mà bạn đã đưa vào. Bạn có thể sử dụng các khoá bộ nhớ đệm đồng thời thực hiện Chính sách Điền bộ nhớ đệm, chính sách Tra cứu bộ nhớ đệm, Chính sách InvalidateCachechính sách Bộ nhớ đệm của 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 ra một giá trị nhận dạng liên kết với giá trị mà bạn đưa vào bộ nhớ đệm. Bạn cũng có thể sử dụng chính 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ớ đệm sau đây, bạn có thể tạo khoá bộ nhớ đệm:

Phần tử cấu hình bộ nhớ đệm Nội dung mô tả
<CacheKey>/<KeyFragment> Sử dụng kết hợp các phần tử <CacheKey> <KeyFragment> để 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 từ các biến.
<Scope> hoặc <Prefix> Sử dụng các phần tử <Scope> hoặc <Prefix> để bổ sung thêm các khoá bộ nhớ đệm cho không gian tên. <Scope> liệt kê danh sách các giá trị được xác định trước. Phần tử <Prefix> ghi đè <Scope> bằng một giá trị do bạn chọn.

Các giá trị này được nối theo dạng sau, trong đó giá trị <Scope> hoặc <Prefix> được phân tách với các 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 hai dấu gạch dưới.

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ị trong tiêu đề Chấp nhận của phản hồi.

Sử dụng <CacheKey>

Phần tử <CacheKey> định cấu hình cách Edge tạo một giá trị nhận dạng duy nhất (một khoá) cho mỗi mục trong bộ nhớ đệm mà công cụ này tạo ra. Khi truy xuất giá trị đã lưu vào bộ nhớ đệm, Edge sẽ sử dụng khoá 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ả chức năng lưu vào bộ nhớ đệm và truy xuất. Trong chính sách PopulateCache và LookupCache, mỗi chính sách phải có các phần tử <CacheKey> giống nhau để đảm bảo rằng giá trị được truy xuất từ bộ nhớ đệm tương ứng với giá trị được đặt ở đó.

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 phần tử <KeyFragment> chỉ định được nối với hai dấu gạch dưới giữa các giá trị để tạo thành một phần của khoá bộ nhớ đệm.

Ví dụ: cấu hình sau đây 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ạ dưới đây:

<KeyFragment ref="variable_name"/>

Ví dụ: để giá trị khoá bộ nhớ đệm kết hợp với Content-Type của thông báo yêu cầu, bạn 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>

Kết quả là khoá bộ nhớ đệm sẽ kết thúc bằng apiAccessToken__application/json__bar.

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

Khoá bộ nhớ đệm bắt nguồn từ tham số truy vấn

Bằng cách sử dụng các biến như request.queryparam.<queryparam_name> và request.querystring, bạn có thể định cấu hình khoá bộ nhớ đệm để khoá đó chứa các phần của chuỗi truy vấn của yêu cầu. Ví dụ: URL sau đây 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 của mình:

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 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 với nhau, như sau:

other_key_parts__value1__value2

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

Một cách khác là sử dụng biến request.querystring. Biến này có thể chèn toàn bộ chuỗi tham số dưới dạng một phần của khoá bộ nhớ đệm. Xin lưu ý rằng mặc dù phương thức này tính đến tất cả các thông số, nhưng nếu thứ tự của các thông số thay đổi giữa các yêu cầu, 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 bạn có thể sử dụng, hãy xem bài viết Tài liệu tham khảo về biến.

Sử dụng <Scope> và <Prefix>

Các phần tử <Scope><Prefix> cung cấp một cách để tăng cường khoá bằng tiền tố không gian tên. Những giá trị mà chúng biểu thị sẽ được thêm vào trước khoá bộ nhớ đệm.

Phần tử <Scope> được sử dụng theo mặc định. Đây là một bảng liệt kê có giá trị dao động từ rộng đến hẹp, trong đó giá trị mặc định là hẹp nhất. Giá trị mặc định này sẽ đượ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>, sau đó chỉ định giá trị tuỳ chỉnh cho không gian tên.

Ví dụ: giá trị <Scope> "Global" (Toàn cầu) – 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 là "mycompany" và một môi trường có tên là "prod", thì giá trị được thêm vào trước thu được sẽ như sau:

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

Nếu bạn đang dùng Global scope với khoá bộ nhớ đệm đã xác định ở trên, thì 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 TraCache, bạn có thể định cấu hình phạm vi để tăng mức độ đặc trưng từ Toàn cục thành Độc quyền. Phạm vi riêng biệt là phạm vi cụ thể nhất, 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 nhập bộ nhớ đệm có phạm vi Dành riêng được bắt đầu bằng biểu mẫu sau:

orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__[serializedCacheKey]

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

apifactory__test__weatherapi__16__default__apiAccessToken