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

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

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ị được lưu vào bộ nhớ đệm bằng cách định cấu hình các khoá bộ nhớ đệm. Khoá lưu vào bộ nhớ đệm, cùng với các giá trị khác mà bạn có thể định cấu hình, mang đến cho bạn một cách đáng tin cậy để lấy ra cùng một dữ liệu mà bạn đã đưa vào. Bạn sử dụng khoá bộ nhớ đệm với chính sách Điền vào bộ nhớ đệm, chính sách LookupCache, chính sách InvalidateCachechính sách Bộ nhớ đệm phản hồi.

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

Bạn có thể tạo khoá bộ nhớ đệm bằng các phần tử cấu hình chính sách bộ nhớ đệm sau đây:

Phần tử cấu hình bộ nhớ đệm Mô tả
<CacheKey>/<KeyFragment> Sử dụng các phần tử <CacheKey> <KeyFragment> kết hợp để chỉ định một giá trị nhận dạng riêng biệt cho các mục trong bộ nhớ đệm. Giá trị KeyFragment có thể là các chữ cố đị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> để đặt thêm không gian tên cho các khoá bộ nhớ đệm. <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 tự chọn.

Các giá trị này được nối theo dạng sau, với các 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 dấu gạch dưới kép.

scope | prefix__keyfragment[__keyfragment]

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

Sử dụng <CacheKey>

Phần tử <CacheKey> định cấu hình cách Edge sẽ tạo một giá trị nhận dạng riêng biệt (khoá) cho mỗi mục nhập trong bộ nhớ đệm mà Edge tạo. Khi truy xuất giá trị được lưu vào bộ nhớ đệm, Edge sẽ dùng khoá bộ nhớ đệm để xác định vị trí của giá trị chính xác. Trong chính sách ResponseCache, một cấu hình sẽ xác định khoá cho cả việc lưu vào bộ nhớ đệm và truy xuất. Trong các chính sách PopulateCache và 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 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>. Tại thời gian chạy, các giá trị do phần tử <KeyFragment> chỉ định sẽ được nối với hai dấu gạch dưới ở giữa để 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á của bộ nhớ đệm bằng cách tham chiếu biến trong phần tử <KeyFragment>, như minh hoạ ở đây:

<KeyFragment ref="variable_name"/>

Ví dụ: để giá trị khoá của bộ nhớ đệm kết hợp 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ả này là một khoá bộ nhớ đệm có đuôi là apiAccessToken__application/json__bar.

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

Khoá bộ nhớ đệm bắt nguồn từ các 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 một khoá bộ nhớ đệm để khoá này bao gồm các phần của chuỗi truy vấn trong yêu cầu. Ví dụ: URL sau đây sử dụng 2 tham số truy vấn (param1 và param2) mà bạn có thể 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 như sau:

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

Trong thời gian chạy, khoá lưu vào bộ nhớ đệm sẽ bao gồm các giá trị tham số được nối, như trong phần 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ự do thứ tự phần tử <KeyFragment> đề xuất. Ngoài ra, xin 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ố truy vấn yêu cầu của bạn khác nhau, thì các biến thể sẽ không được tính vào khoá bộ nhớ đệm.

Một lựa chọn khác là sử dụng biến request.querystring. Biến này sẽ chèn toàn bộ chuỗi tham số theo đúng nghĩa đen vào 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 tham số, nhưng nếu thứ tự của các tham số thay đổi từ yêu cầu này sang yêu cầu khác thì khoá sẽ khác. 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á của bộ nhớ đệm.

Để xem danh sách các biến mà bạn có thể sử dụng, hãy xem bài viết Thông tin 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. Các giá trị mà chúng đại diện sẽ được thêm vào trước khoá bộ nhớ đệm của bạn.

Theo mặc định, phần tử <Scope> sẽ được dùng. Đây là một kiểu liệt kê có các giá trị trong phạm vi từ rộng đến hẹp, trong đó giá trị hẹp nhất là giá trị mặc định. Giá trị mặc định này sẽ được 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>, nhờ đó chỉ định một giá trị tuỳ chỉnh cho việc đặt không gian tên.

Ví dụ: giá trị <Scope> "Global" (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 sẽ là giá trị sau:

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, 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 LookupCache, bạn có thể định cấu hình phạm vi để tăng độ cụ thể từ Global (Toàn cầu) đến Exclusive (Độc quyền). Phạm vi dành riêng là phạm vi cụ thể nhất và do đó, thể hiện rủi ro tối thiểu về xung đột không gian tên trong một bộ nhớ đệm nhất định. Mỗi mục nhập trong bộ nhớ đệm có phạm vi Exclusive (Độc quyền) đều có tiền tố theo dạng sau:

orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__[serializedCacheKey]

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

apifactory__test__weatherapi__16__default__apiAccessToken