Ví dụ redis của Nodejs

Bộ nhớ đệm là một trong những cách tối ưu hóa hiệu quả nhất mà bạn có thể áp dụng cho một ứng dụng. Nó liên quan đến việc lưu trữ một số dữ liệu ở một vị trí tạm thời được gọi là bộ đệm để có thể truy xuất dữ liệu nhanh hơn nhiều khi được yêu cầu trong tương lai. Dữ liệu này thường là kết quả của một số tính toán, yêu cầu API hoặc truy vấn cơ sở dữ liệu trước đó

Mục tiêu chính của bộ nhớ đệm là cải thiện hiệu suất ứng dụng. Vì dữ liệu thường có thể được truy xuất nhanh hơn nhiều từ bộ nhớ đệm nên nhu cầu lặp lại yêu cầu mạng hoặc truy vấn cơ sở dữ liệu cho cùng một dữ liệu sẽ giảm và điều này có thể giảm đáng kể độ trễ liên quan đến một thao tác cụ thể. Bộ nhớ đệm cũng giúp giảm chi phí mạng vì dữ liệu được truyền ít hơn và làm cho hiệu suất của ứng dụng trở nên đáng tin cậy và dễ dự đoán hơn vì bạn ít bị ảnh hưởng bởi tắc nghẽn mạng, thời gian ngừng dịch vụ, tải đột biến và các thách thức khác

Trong bài viết này, chúng ta sẽ thảo luận cách thiết lập bộ nhớ đệm trong một Node. js thông qua Redis  , một cơ sở dữ liệu trong bộ nhớ phổ biến và linh hoạt thường được sử dụng làm bộ đệm cơ sở dữ liệu phân tán cho các ứng dụng web. Nó có thể được sử dụng với nhiều ngôn ngữ và môi trường lập trình khác nhau, và nó có rất nhiều công dụng khác ngoài bộ nhớ đệm

Bằng cách làm theo hướng dẫn này, bạn sẽ tìm hiểu các khía cạnh sau của Redis caching trong Node. js

  • Cách cài đặt và thiết lập Redis cho bộ nhớ đệm
  • Cách triển khai mẫu Cache-aside (tải chậm) phổ biến
  • Cách đo hiệu suất của ứng dụng web thông qua điểm chuẩn
  • Các kỹ thuật nâng cao hiệu quả của bộ nhớ đệm

điều kiện tiên quyết

Trước khi bạn tiếp tục với phần còn lại của hướng dẫn này, hãy đảm bảo rằng bạn đã đáp ứng các yêu cầu sau

  • Kinh nghiệm cơ bản với việc xây dựng các ứng dụng máy chủ trong Node. js
  • Một phiên bản gần đây của Node. js  và npm  được cài đặt trên máy tính hoặc máy chủ của bạn

Ví dụ redis của Nodejs

🔭 Muốn được thông báo khi Nút của bạn. ứng dụng js ngừng hoạt động?

Chuyển sang Thời gian hoạt động tốt hơn và bắt đầu theo dõi các điểm cuối của bạn sau 2 phút

Trong hướng dẫn này, chúng tôi sẽ trình bày khái niệm về bộ nhớ đệm trong Node. js bằng cách sửa đổi ứng dụng Hacker News Search từ hướng dẫn trước đó về Express và Pug. Bạn không cần phải làm theo hướng dẫn để xây dựng ứng dụng;

git clone https://github.com/betterstack-community/hacker-news

Khi lệnh thoát, hãy chuyển sang thư mục

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
8 mới được tạo và cài đặt các phụ thuộc của dự án thông qua
. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
9

Sau đó, kiểm tra nội dung của tệp

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
0 trong trình soạn thảo văn bản của bạn

Các dòng có liên quan trong tệp được hiển thị bên dưới

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .

Lộ trình

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
1 ở trên dự kiến ​​một truy vấn mà sau đó được chuyển đến hàm
Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
2 để truy vấn API Hacker News do Algolia cung cấp để nhận các tin bài hàng đầu cho cụm từ tìm kiếm đó. Khi phản hồi JSON từ API được truy xuất, nó được sử dụng để hiển thị tài liệu HTML thông qua mẫu
Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
3 trong thư mục
Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
4

Bạn có thể kiểm tra ứng dụng bằng cách khởi động máy chủ phát triển thông qua lệnh bên dưới. Lưu ý rằng máy chủ sẽ tự động khởi động lại bất cứ khi nào phát hiện thấy thay đổi trong bất kỳ tệp dự án nào

Sau đó, đi đến

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
5 (hoặc
Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
6) trong trình duyệt web của bạn và đưa ra yêu cầu tìm kiếm cho một thuật ngữ phổ biến. Bạn nên quan sát rằng các kết quả có liên quan từ Hacker News được tìm nạp và hiển thị cho truy vấn của bạn

Bây giờ, ứng dụng demo của chúng ta đã được thiết lập, hãy tạo và chạy một điểm chuẩn để xác định xem ứng dụng của chúng ta có thể giải quyết các yêu cầu đến tuyến đường

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
1 nhanh như thế nào để chúng ta có thể tìm ra hiệu suất hiện tại của mình trước khi triển khai bộ nhớ đệm nhằm cải thiện nó

Trong bước này, chúng tôi sẽ sử dụng gói Artillery để đo hiệu suất của ứng dụng ở trạng thái hiện tại để chúng tôi có thể dễ dàng định lượng sự khác biệt sau khi thêm bộ nhớ đệm thông qua Redis. Có một phép đo cơ sở là một bước thiết yếu trước khi thực hiện bất kỳ tối ưu hóa hiệu suất nào. Nó giúp bạn xác định xem việc tối ưu hóa có mang lại hiệu quả mong muốn hay không và liệu sự đánh đổi có xứng đáng hay không

Đảm bảo rằng bạn đang ở trong thư mục dự án, sau đó cài đặt gói

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
8 trên toàn cầu thông qua
. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
9

Sau đó, lệnh

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
8 sẽ có thể truy cập được. Đảm bảo rằng việc chạy
config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"
1 mang lại số phiên bản là 2. 0. 0 hoặc cao hơn

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux

Pháo binh sử dụng các tệp định nghĩa thử nghiệm  để xác định các tham số cấu hình cho lần chạy thử nghiệm. Chúng là các tệp YAML bao gồm hai phần chính.

config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"
2 và
config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"
3. Cái trước chỉ định cài đặt cho thử nghiệm, chẳng hạn như URL mục tiêu, tiêu đề HTTP, người dùng ảo, yêu cầu trên mỗi người dùng, v.v. trong khi cái sau mô tả hành động mà mỗi người dùng ảo phải thực hiện trong quá trình thử nghiệm

Tạo một tệp

config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"
4 trong thư mục gốc của thư mục dự án của bạn và mở nó trong trình soạn thảo văn bản của bạn

Điền vào tệp với mã sau

config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"

Trong phần

config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"
2,
config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"
6 là URL của máy chủ. Khối
config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"
7 này mô tả giai đoạn tải kéo dài 30 giây, trong đó 10 người dùng ảo mới được tạo mỗi giây. Khi một người dùng ảo được tạo, họ sẽ thực hiện kịch bản được xác định trong khối
config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"
3 đang thực hiện yêu cầu GET tới tuyến đường
Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
1. Sau khi tất cả người dùng ảo đã hoàn thành kịch bản của họ, thử nghiệm sẽ hoàn tất và bản tóm tắt kết quả sẽ được in ra bảng điều khiển

Mặc dù thử nghiệm này có thể không đại diện cho một kịch bản trong thế giới thực, nhưng nó sẽ cung cấp cho chúng tôi dữ liệu có giá trị về hiệu suất của điểm cuối

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
1 mà chúng tôi có thể tham khảo lại sau khi thực hiện các tối ưu hóa theo kế hoạch. Bạn nên xem tài liệu về Pháo binh  để khám phá cách tạo luồng người dùng thực tế cho ứng dụng của mình

Hãy tiếp tục và thực thi tập lệnh

config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - name: "Search HN for Programming content"
    flow:
      - get:
          url: "/search?q=Programming"
4 thông qua lệnh hiển thị bên dưới. Đảm bảo rằng ứng dụng Hacker News đang chạy trong một thiết bị đầu cuối riêng biệt trước khi thực hiện lệnh này

artillery run artillery.yml

Bạn nên quan sát bản tóm tắt sau đây ở cuối đầu ra do Pháo binh sản xuất

. . .

All VUs finished. Total time: 1 minute, 1 second

--------------------------------
Summary report @ 12:10:08(+0000)
--------------------------------

http.codes.200: ............................................................... 600
http.request_rate: ............................................................ 10/sec
http.requests: ................................................................ 600
http.response_time:
  min: ........................................................................ 187
  max: ........................................................................ 2534
  median: ..................................................................... 584.2
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
http.responses: ............................................................... 600
vusers.completed: ............................................................. 600
vusers.created: ............................................................... 600
vusers.created_by_name.Search HN for Programming content: ..................... 600
vusers.failed: ................................................................ 0
vusers.session_length:
  min: ........................................................................ 191.5
  max: ........................................................................ 2539.2
  median: ..................................................................... 596
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9

Các con số chính xác có thể sẽ khác nhau trong lần chạy thử nghiệm của bạn, nhưng sau đây là phần giải thích của báo cáo trên

  • 10 yêu cầu được gửi đến máy chủ mỗi giây và tổng cộng 600 yêu cầu
  • Tất cả 600 yêu cầu đã thành công (200 OK)
  • Thời gian phản hồi tối thiểu và tối đa lần lượt là 187ms và 2534ms
  • Thời gian phản hồi trung bình là 584. 2ms
  • Các số phân vị thứ 95 và 99 là 1002. 4ms và 1587. 9ms tương ứng. Điều này có nghĩa là, 95% thời gian, yêu cầu được thực hiện dưới 1002. 4ms và 99% thời gian là dưới 1587. 9ms

Bây giờ chúng tôi có một số dữ liệu có thể định lượng về hiệu suất hiện tại của tuyến đường

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
1 trong Nút của chúng tôi. js, hãy tiếp tục và cài đặt Redis trong phần tiếp theo

Bước 3 — Cài đặt và thiết lập Redis

Phần này sẽ mô tả cách cài đặt và thiết lập Redis trên Ubuntu 20. 04. Nếu bạn đang sử dụng một hệ điều hành khác, hãy truy cập trang tải xuống để tải phiên bản mới nhất cho hệ thống của bạn. Lưu ý rằng Redis không được hỗ trợ chính thức trong Windows, nhưng bạn có thể cài đặt và thiết lập nó trong Windows 10 trở lên

Mặc dù Redis đã có sẵn trong kho lưu trữ mặc định của Ubuntu, nhưng việc cài đặt nó từ đó không được khuyến khích vì phiên bản có sẵn thường không phải là mới nhất. Để đảm bảo rằng chúng tôi nhận được phiên bản ổn định mới nhất, chúng tôi sẽ sử dụng Ubuntu PPA chính thức do nhóm Redis duy trì

Chạy lệnh sau trong phiên bản đầu cuối mới để thêm kho lưu trữ vào chỉ mục

artillery run artillery.yml
3. Chỉ mục gói cục bộ sẽ cập nhật ngay sau khi thêm kho lưu trữ

sudo add-apt-repository ppa:redislabs/redis -y

Sau đó, cài đặt gói

artillery run artillery.yml
4 thông qua lệnh bên dưới

Khi lệnh kết thúc, hãy xác minh phiên bản Redis đã được cài đặt

Redis server v=6.2.6 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=9c9e426e2f96cc51

Sau khi cài đặt Redis, hãy mở tệp cấu hình của nó trong trình soạn thảo văn bản của bạn

sudo nano /etc/redis/redis.conf

Bên trong tệp, tìm chỉ thị

artillery run artillery.yml
5 và thay đổi giá trị của nó từ
artillery run artillery.yml
6 thành
artillery run artillery.yml
7. Chỉ thị này tuyên bố hệ thống init quản lý Redis như một dịch vụ. Nó được đặt thành
artillery run artillery.yml
7 ở đây vì đó là những gì Ubuntu sử dụng theo mặc định

. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

Lưu và đóng tệp sau khi thực hiện các thay đổi, sau đó khởi động dịch vụ Redis bằng lệnh bên dưới

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
0

Hãy tiếp tục và xác nhận rằng dịch vụ Redis đang chạy thông qua lệnh sau

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
1

Bạn nên quan sát đầu ra sau

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
2

Điều này cho biết rằng Redis đã được thiết lập và đang chạy và nó được thiết lập để tự động khởi động mỗi khi máy chủ được khởi động lại

Là cách cuối cùng để xác nhận rằng cài đặt Redis của bạn đang hoạt động bình thường, hãy khởi chạy lời nhắc

artillery run artillery.yml
9

Trong dấu nhắc kết quả, hãy nhập lệnh

. . .

All VUs finished. Total time: 1 minute, 1 second

--------------------------------
Summary report @ 12:10:08(+0000)
--------------------------------

http.codes.200: ............................................................... 600
http.request_rate: ............................................................ 10/sec
http.requests: ................................................................ 600
http.response_time:
  min: ........................................................................ 187
  max: ........................................................................ 2534
  median: ..................................................................... 584.2
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
http.responses: ............................................................... 600
vusers.completed: ............................................................. 600
vusers.created: ............................................................... 600
vusers.created_by_name.Search HN for Programming content: ..................... 600
vusers.failed: ................................................................ 0
vusers.session_length:
  min: ........................................................................ 191.5
  max: ........................................................................ 2539.2
  median: ..................................................................... 596
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
0. Bạn sẽ nhận được một đầu ra
. . .

All VUs finished. Total time: 1 minute, 1 second

--------------------------------
Summary report @ 12:10:08(+0000)
--------------------------------

http.codes.200: ............................................................... 600
http.request_rate: ............................................................ 10/sec
http.requests: ................................................................ 600
http.response_time:
  min: ........................................................................ 187
  max: ........................................................................ 2534
  median: ..................................................................... 584.2
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
http.responses: ............................................................... 600
vusers.completed: ............................................................. 600
vusers.created: ............................................................... 600
vusers.created_by_name.Search HN for Programming content: ..................... 600
vusers.failed: ................................................................ 0
vusers.session_length:
  min: ........................................................................ 191.5
  max: ........................................................................ 2539.2
  median: ..................................................................... 596
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
1

Bạn có thể gõ

. . .

All VUs finished. Total time: 1 minute, 1 second

--------------------------------
Summary report @ 12:10:08(+0000)
--------------------------------

http.codes.200: ............................................................... 600
http.request_rate: ............................................................ 10/sec
http.requests: ................................................................ 600
http.response_time:
  min: ........................................................................ 187
  max: ........................................................................ 2534
  median: ..................................................................... 584.2
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
http.responses: ............................................................... 600
vusers.completed: ............................................................. 600
vusers.created: ............................................................... 600
vusers.created_by_name.Search HN for Programming content: ..................... 600
vusers.failed: ................................................................ 0
vusers.session_length:
  min: ........................................................................ 191.5
  max: ........................................................................ 2539.2
  median: ..................................................................... 596
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
2 sau đó để thoát khỏi dấu nhắc
artillery run artillery.yml
9

Bây giờ, phiên bản Redis của bạn đã hoạt động đầy đủ, hãy tiếp tục và cài đặt các gói cần thiết để làm việc với Redis trong Node. js trong phần tiếp theo

Bước 5 — Cài đặt và cấu hình gói Redis cho Node. js

Sử dụng Redis làm giải pháp lưu trữ cho Node. js trở nên dễ dàng thông qua gói redis do nhóm nòng cốt cung cấp. Hãy tiếp tục và cài đặt nó trong ứng dụng của bạn thông qua

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
9 như hình bên dưới

Sau khi cài đặt hoàn tất, hãy mở tệp

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
0 trong trình soạn thảo văn bản của bạn

Nhập gói

artillery run artillery.yml
4 ở đầu tệp bên dưới các lần nhập khác và tạo ứng dụng khách Redis mới như hiển thị bên dưới

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
3

Cổng mặc định cho Redis là

. . .

All VUs finished. Total time: 1 minute, 1 second

--------------------------------
Summary report @ 12:10:08(+0000)
--------------------------------

http.codes.200: ............................................................... 600
http.request_rate: ............................................................ 10/sec
http.requests: ................................................................ 600
http.response_time:
  min: ........................................................................ 187
  max: ........................................................................ 2534
  median: ..................................................................... 584.2
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
http.responses: ............................................................... 600
vusers.completed: ............................................................. 600
vusers.created: ............................................................... 600
vusers.created_by_name.Search HN for Programming content: ..................... 600
vusers.failed: ................................................................ 0
vusers.session_length:
  min: ........................................................................ 191.5
  max: ........................................................................ 2539.2
  median: ..................................................................... 596
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
7 vì vậy đó là cổng được cung cấp cho phương thức
. . .

All VUs finished. Total time: 1 minute, 1 second

--------------------------------
Summary report @ 12:10:08(+0000)
--------------------------------

http.codes.200: ............................................................... 600
http.request_rate: ............................................................ 10/sec
http.requests: ................................................................ 600
http.response_time:
  min: ........................................................................ 187
  max: ........................................................................ 2534
  median: ..................................................................... 584.2
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
http.responses: ............................................................... 600
vusers.completed: ............................................................. 600
vusers.created: ............................................................... 600
vusers.created_by_name.Search HN for Programming content: ..................... 600
vusers.failed: ................................................................ 0
vusers.session_length:
  min: ........................................................................ 191.5
  max: ........................................................................ 2539.2
  median: ..................................................................... 596
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
8. Các tùy chọn cấu hình khác cho phương pháp này có thể được truy cập thông qua trang tài liệu của nó. Sau khi tạo ứng dụng khách Redis, bạn nên nghe ít nhất
. . .

All VUs finished. Total time: 1 minute, 1 second

--------------------------------
Summary report @ 12:10:08(+0000)
--------------------------------

http.codes.200: ............................................................... 600
http.request_rate: ............................................................ 10/sec
http.requests: ................................................................ 600
http.response_time:
  min: ........................................................................ 187
  max: ........................................................................ 2534
  median: ..................................................................... 584.2
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
http.responses: ............................................................... 600
vusers.completed: ............................................................. 600
vusers.created: ............................................................... 600
vusers.created_by_name.Search HN for Programming content: ..................... 600
vusers.failed: ................................................................ 0
vusers.session_length:
  min: ........................................................................ 191.5
  max: ........................................................................ 2539.2
  median: ..................................................................... 596
  p95: ........................................................................ 1002.4
  p99: ........................................................................ 1587.9
9 và
sudo add-apt-repository ppa:redislabs/redis -y
0 trước khi tiếp tục

Sau khi bạn lưu tệp, ứng dụng sẽ khởi động lại và bạn sẽ thấy "Redis sẵn sàng" ở đầu ra với điều kiện là phiên bản Redis của bạn đã được thiết lập và chạy

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
4

Trong phần tiếp theo, chúng tôi sẽ triển khai chiến lược lưu vào bộ nhớ đệm cho tuyến đường

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
1 trong ứng dụng Hacker News của chúng tôi để tốc độ giải quyết các truy vấn tìm kiếm được cải thiện đáng kể

Bước 6 — Bộ nhớ đệm phản hồi API trong Redis

Trong bước này, bạn sẽ lưu vào bộ đệm ẩn các phản hồi cho từng cụm từ tìm kiếm trong Redis để chúng có thể được sử dụng lại cho các yêu cầu tiếp theo nếu cụm từ tìm kiếm chính xác được lặp lại. Chúng tôi sẽ sử dụng Mẫu dành riêng cho bộ nhớ cache  phổ biến chỉ định rằng một nỗ lực được thực hiện để truy xuất dữ liệu được yêu cầu từ bộ nhớ cache trước khi liên hệ với nguồn dữ liệu gốc nếu mục không tồn tại trong bộ nhớ cache. Sau đó, dữ liệu đã truy xuất được lưu trữ trong bộ đệm để các yêu cầu lặp lại cho cùng một dữ liệu có thể được giải quyết nhanh hơn

Khi một yêu cầu được thực hiện bằng cách truy xuất thành công dữ liệu được yêu cầu từ bộ đệm, nó được gọi là lần truy cập bộ đệm. Nếu kho lưu trữ dữ liệu gốc phải được truy cập để thực hiện một yêu cầu, nó được gọi là lỗi bộ đệm. Một chiến lược bộ nhớ đệm tốt sẽ đảm bảo rằng hầu hết các yêu cầu sẽ dẫn đến một lần truy cập bộ đệm. Tuy nhiên, không thể tránh khỏi lỗi bộ đệm đôi khi, đặc biệt đối với dữ liệu được cập nhật thường xuyên

Bắt đầu bằng cách mở tệp

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
0 trong trình soạn thảo văn bản của bạn

Hãy tiếp tục và cập nhật tuyến đường

Telemetry is on. Learn more: https://artillery.io/docs/resources/core/telemetry.html

        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/


VERSION INFO:

Artillery Core: 2.0.0-12
Artillery Pro:  not installed (https://artillery.io/product)

Node.js: v16.14.0
OS:      linux
1 như sau

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
5

Mã này sử dụng ứng dụng khách Redis mà chúng tôi đã tạo ở bước trước để lưu vào bộ đệm và truy xuất phản hồi JSON nhận được từ API Algolia. Khóa Redis bao gồm sự kết hợp của tiền tố

sudo add-apt-repository ppa:redislabs/redis -y
4 và phiên bản chữ thường của cụm từ tìm kiếm để mỗi khóa là duy nhất cho cụm từ tìm kiếm đã chỉ định. Bước đầu tiên là sử dụng phương pháp
sudo add-apt-repository ppa:redislabs/redis -y
5 để kiểm tra bộ đệm cho
sudo add-apt-repository ppa:redislabs/redis -y
6 đã chỉ định. Nếu khóa này không tồn tại, phương thức này sẽ trả về
sudo add-apt-repository ppa:redislabs/redis -y
7 để bạn biết truy vấn nguồn của dữ liệu

Sau khi truy xuất dữ liệu, bạn có thể sử dụng

sudo add-apt-repository ppa:redislabs/redis -y
8 hoặc
sudo add-apt-repository ppa:redislabs/redis -y
9 để lưu trữ dữ liệu trong bộ đệm dưới tên khóa. Phương pháp
sudo add-apt-repository ppa:redislabs/redis -y
9 được ưu tiên ở đây để thời gian chờ là năm phút (300 giây) được đặt trên phím. Do đó, mỗi kết quả được lưu trong bộ nhớ cache được sử dụng lại trong tối đa năm phút trước khi kết quả hết hạn và được làm mới, điều này giúp chúng tôi tránh cung cấp kết quả cũ cho một cụm từ tìm kiếm cụ thể

Bây giờ bạn đã tích hợp thư viện Redis để triển khai chiến lược bộ nhớ đệm cơ bản, hãy tiếp tục và chạy lại điểm chuẩn trước đó để xem các thay đổi có mang lại hiệu quả như mong muốn không

Bước 7 - Chạy lại điểm chuẩn

Quay trở lại thiết bị đầu cuối và thực hiện lệnh bên dưới để gửi lại người dùng ảo đến máy chủ của bạn

artillery run artillery.yml

Bạn nên quan sát các kết quả sau khi lệnh thoát

. . .

async function searchHN(query) {
  const response = await axios.get(
    `https://hn.algolia.com/api/v1/search?query=${query}&tags=story&hitsPerPage=90`
  );
  return response.data;
}

app.get('/search', async (req, res, next) => {
  try {
    const searchQuery = req.query.q;
    if (!searchQuery) {
      res.redirect(302, '/');
      return;
    }

    const results = await searchHN(searchQuery);
    res.render('search', {
      title: `Search results for: ${searchQuery}`,
      searchResults: results,
      searchQuery,
    });
  } catch (err) {
    next(err);
  }
});

. . .
7

So với lần chạy trước, chúng tôi nhận được thời gian phản hồi tối thiểu và trung bình thấp hơn nhiều (24ms và 26. 3ms tương ứng) và 95% tất cả các yêu cầu đã được hoàn thành trong vòng 48. 9ms. Đây là một cải tiến lớn so với các con số trước đó (lần lượt là 187ms, 584ms và 1002ms). Thời gian phản hồi trong lần chạy này thấp hơn nhiều vì chỉ một vài người dùng đầu tiên truy cập trực tiếp vào API, trong khi phần lớn các yêu cầu được thực hiện bằng cách sử dụng dữ liệu được lưu trong bộ nhớ cache

Ngoài lợi ích chính là giảm độ trễ và thời gian phản hồi nhanh hơn cho người dùng, nó cũng giảm thiểu chi phí của chúng tôi, đặc biệt là khi chúng tôi làm việc với API trả phí vì chúng tôi có thể sử dụng lại phản hồi nhiều lần trước khi cần làm mới. Các API cũng thường có giới hạn tốc độ hoặc thời gian ngừng hoạt động nên cách tiếp cận này cũng giúp ngăn chặn tình trạng cạn kiệt tài nguyên

Bây giờ, chúng ta đã xem một ví dụ về hiệu quả của bộ nhớ đệm trong việc cải thiện tốc độ hoàn thành yêu cầu, hãy thảo luận về một số cân nhắc để quyết định bộ nhớ đệm nào và cách chúng ta có thể đạt được tỷ lệ đạt bộ nhớ đệm cao trong các ứng dụng của mình

Bước 8 — Đạt được tỷ lệ trúng bộ đệm cao

Khi quyết định chiến lược bộ nhớ đệm cho Nút của bạn. js, bạn cần tìm cách cache dữ liệu tối ưu nhất để đạt tỷ lệ cache hit cao. Các ứng cử viên lý tưởng cho bộ nhớ đệm là những dữ liệu có thể được sử dụng lại cho một số yêu cầu trước khi cần cập nhật. Nếu dữ liệu thay đổi thường xuyên đến mức không thể sử dụng lại cho yêu cầu tiếp theo, thì đó không phải là ứng cử viên tốt cho bộ nhớ đệm

Trong ví dụ trên, kết quả cho cụm từ tìm kiếm Hacker News không có khả năng thay đổi đáng kể trong vòng năm phút, vì vậy, nên tiếp tục sử dụng lại phản hồi từ API Hacker News trong khoảng thời gian đó. Tùy thuộc vào độ nhạy cảm của dữ liệu, bạn có khả năng lưu trữ dữ liệu đó trong thời gian dài hơn hoặc thậm chí là mãi mãi nếu dữ liệu không bao giờ thay đổi và do đó có thể được sử dụng lại vô thời hạn

Một xem xét khác cho dữ liệu bộ nhớ đệm là tần suất nó được yêu cầu. Dữ liệu không được yêu cầu thường xuyên có thể không được lưu vào bộ đệm ngay cả khi dữ liệu đó có thể được sử dụng lại. Điều này là do bộ nhớ cache thường bị giới hạn nên bạn chỉ muốn nó được sử dụng cho các tài nguyên được truy cập thường xuyên trong các điểm phát sóng của ứng dụng của bạn

Mẫu dành riêng cho bộ đệm được thảo luận và triển khai ở trên chỉ là một trong nhiều mẫu mà bạn có thể sử dụng để tạo bộ nhớ đệm. Dưới đây là tổng quan ngắn gọn về một số mẫu khác mà bạn có thể tìm hiểu thêm

  • Mô hình đọc qua. dữ liệu luôn được đọc từ bộ đệm. Khi xảy ra lỗi bộ đệm, dữ liệu sẽ được tải từ nguồn dữ liệu, được lưu trữ trong bộ đệm và được trả lại cho ứng dụng
  • Mẫu ghi phía sau (Write-back). dữ liệu luôn được ghi vào bộ đệm trước khi nó được cập nhật trong kho lưu trữ dữ liệu sau đó
  • Mô hình ghi thông qua. tương tự như Write-behind, nhưng cập nhật kho lưu trữ dữ liệu được thực hiện đồng bộ trong cùng một giao dịch để dữ liệu được lưu trong bộ nhớ cache không bao giờ cũ
  • Làm mới mô hình phía trước. dữ liệu được lưu trong bộ nhớ đệm được truy cập thường xuyên được làm mới trước khi chúng hết hạn để giảm thiểu hoặc loại bỏ hoàn toàn độ ổn định của dữ liệu. Nó thường được sử dụng trong khối lượng công việc nhạy cảm với độ trễ

Trước khi kết thúc hướng dẫn này, chúng ta hãy thảo luận về một khía cạnh quan trọng khác của bộ nhớ đệm mà bạn nên biết

Bước 9 — Duy trì bộ đệm

Chỉ có hai điều khó khăn trong Khoa học máy tính. vô hiệu hóa bộ đệm và đặt tên cho mọi thứ. -- Phil Karlton

Vô hiệu hóa bộ đệm và loại bỏ bộ đệm là những cân nhắc quan trọng khi triển khai chiến lược bộ nhớ đệm trong ứng dụng của bạn. Phần trước đề cập đến cách các mục trong bộ đệm được làm mới hoặc xóa khi chúng bị cũ, trong khi phần sau chỉ nói về việc xóa các mục khỏi bộ đệm bất kể chúng có cũ hay không

Vô hiệu hóa bộ đệm

Trong ví dụ được sử dụng cho hướng dẫn này, chúng tôi đang sử dụng giá trị Thời gian tồn tại (TTL) để vô hiệu hóa các đối tượng được lưu trong bộ nhớ cache của chúng tôi sau năm phút. Khi một ứng dụng cố gắng đọc một khóa đã hết hạn, nó được coi như là không tìm thấy khóa đó và kho lưu trữ dữ liệu gốc được truy vấn lại một lần nữa. Cách tiếp cận này đảm bảo rằng ngay cả khi giá trị được lưu trong bộ nhớ cache bị cũ, nó sẽ không cũ trong hơn năm phút. Tùy thuộc vào dữ liệu được lưu trong bộ nhớ cache, dung sai cho độ ổn định có thể thấp hơn hoặc cao hơn. Ví dụ: một trang web tin tức thịnh hành có thể chỉ chịu được một vài giây ổn định, nhưng số liệu thống kê về Covid-19 có thể chỉ cần được cập nhật một hoặc hai lần mỗi ngày

trục xuất bộ nhớ cache

Loại bỏ bộ nhớ cache đề cập đến một chính sách theo đó các mục cũ hơn sẽ bị xóa khỏi bộ nhớ cache khi các mục mới hơn được thêm vào. Vì bộ nhớ cache thường bị giới hạn so với bộ nhớ chính, nên việc có chính sách như vậy sẽ đảm bảo rằng chỉ những mục có liên quan mới có mặt trong bộ nhớ cache mọi lúc. Chúng tôi sẽ không thể đề cập đến các chính sách trục xuất khác nhau trong bài viết này, nhưng bạn nên tìm hiểu những điều sau. Ít được sử dụng gần đây nhất (LRU), Ít được sử dụng nhất (LFU), Được sử dụng gần đây nhất (MRU), Nhập trước xuất trước (FIFO)

Phần kết luận

Trong bài viết này, chúng tôi đã thảo luận về những gì và tại sao bộ nhớ đệm trong Node. js, sau đó trình bày cách đánh giá một điểm cuối để đo lường hiệu suất của nó trước khi áp dụng bất kỳ tối ưu hóa nào. Sau đó, chúng tôi thiết lập Redis và tích hợp nó với Node của chúng tôi. js trước khi triển khai mẫu dành riêng cho bộ đệm để lưu các phản hồi API vào bộ đệm. Sau đó, chúng tôi lặp lại điểm chuẩn để minh họa cách bộ nhớ đệm có thể cải thiện đáng kể hiệu suất ứng dụng trước khi kết thúc cuộc thảo luận về một số khái niệm bộ nhớ đệm quan trọng cần lưu ý

Toàn bộ mã được sử dụng trong hướng dẫn này có thể được tải xuống từ GitHub. Cảm ơn đã đọc và chúc bạn viết mã vui vẻ

Nhật ký kể chuyện
Đọc chúng

Trải nghiệm SQL tương thích
quản lý nhật ký có cấu trúc

Khám phá ghi nhật ký →

Tập trung tất cả nhật ký của bạn vào một nơi

Phân tích, tương quan và lọc nhật ký với SQL

Tạo hành động
bảng điều khiển

Chia sẻ và bình luận với sự cộng tác tích hợp

Có một gợi ý bài viết?

Cách triển khai, quản lý và mở rộng nút. Ứng dụng js với PM2

Tìm hiểu các tính năng PM2 quan trọng nhất và cách sử dụng chúng để triển khai, quản lý và mở rộng quy mô Nút của bạn. ứng dụng js trong sản xuất

Tác phẩm này được cấp phép theo Creative Commons Ghi công-Phi thương mại-Chia sẻ tương tự 4. 0 Giấy phép quốc tế