Symfony2: Tự quản lý bộ đệm
Đại lý web » Tin tức kỹ thuật số » Symfony2: Tự quản lý bộ đệm

Symfony2: Tự quản lý bộ đệm

Bộ đệm có mặt ở khắp mọi nơi trong máy tính và may mắn thay, ở những nơi khác. Không có nó, thời gian xử lý sẽ lâu hơn nhiều! Vào thời điểm mà tất cả các khung xứng đáng với cái tên đều sử dụng hệ thống bộ đệm, tại sao chúng ta cần tự quản lý bộ đệm?

Bộ đệm trong Symfony2

Trong Symfony2, bạn có thể dễ dàng thiết lập hệ thống bộ đệm. Bên cạnh đó, nếu chúng tôi muốn chính xác, có vẻ như Symfony có hệ thống bộ đệm riêng (app/cache/env/), và chúng tôi cũng có thể cắm hệ thống bộ đệm ở cấp độ máy chủ (Apache, IIS,…). Bộ đệm này hoàn toàn có thể quản lý được và bộ nhớ dễ bay hơi. Ngay sau khi máy chủ được khởi động lại, bộ đệm của máy chủ sẽ bị xóa.

hệ thống bộ nhớ đệm

Hệ thống bộ nhớ đệm nào tồn tại? Từ bộ nhớ, ba chương trình xuất hiện thường xuyên.

  • XCache
  • Ghi nhớ
  • APC
    APC bây giờ là phản đối kể từ PHP 5.4, vì vậy tôi khuyên bạn không nên cắm nó vào.

Trong trường hợp của tôi, tôi sẽ sử dụng XCache. Bạn cũng có thể tìm thấy bài đăng của tôi về cách cài đặt XCache.

Tại sao phải tự quản lý bộ đệm của bạn

Tôi có thể thấy một vài bình luận đến và hỏi “tại sao? “. Mặc dù Doctrine cho phép bạn dễ dàng sử dụng bộ đệm thông qua phương thức của nó useResultCache(sử dụng, trì hoãn, id). Câu trả lời của tôi rất đơn giản: điều trị miễn phí.

Một ví dụ nhỏ để cung cấp cho bạn một số ý tưởng. Giả sử tôi đang lưu vào bộ đệm một mục từ cơ sở dữ liệu. Nếu tôi sửa đổi thực thể này, bộ đệm ẩn sẽ không được cập nhật cho đến khi dữ liệu hết hạn. Với tính năng quản lý bộ đệm được cá nhân hóa, tôi sẽ có thể thiết lập lại dữ liệu mới và ghi đè lên dữ liệu cũ trước khi bộ đệm đạt đến thời gian quy định. Điều này đòi hỏi quản lý đáng kể, nhưng hiệu suất đạt được có thể là đáng kể.

Symfony2 và cách quản lý bộ đệm của riêng bạn

Tôi cung cấp cho bạn mã ghi nhớ nhỏ này để quản lý dễ dàng. Trong trường hợp của chúng tôi, chức năng của Gist này nhằm trả về kết quả của một truy vấn SQL.

Nguyên mẫu: hàm thực thi ($sql_query, $id = null, $delay = 3600);
Cài đặt:

  1. _sqltruy vấn tương ứng với truy vấn SQL mà bạn muốn thực hiện.
  2. id là mã định danh được liên kết với dữ liệu được lưu trong bộ nhớ cache. Đối với ID x, bạn sẽ có nội dung x.
  3. chậm trễ là thời gian tối đa bạn cung cấp cho bộ đệm sẽ có hiệu lực. Theo mặc định, 3600 giây. Điều này có nghĩa là sau khi lưu dữ liệu của bạn vào bộ nhớ đệm, dữ liệu đó sẽ khả dụng trong 3600 giây.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    chức năng thi hành ($sql_query, $id = null, $delay = 3600)
    {
    // Chúng tôi khai báo một thể hiện bộ đệm
    $cacheDriver = mới DoctrineCommonCacheXcacheCache();
    $kết quả = vô giá trị;
    //Nếu ID đã được nhập và hệ thống bộ đệm chứa dữ liệu cho ID "x"
    if ($id!= vô giá trị && $cacheDriver->chứa($id)) {
    // Sau đó, chúng tôi lấy dữ liệu được lưu trong bộ nhớ cache cho ID "x"
    $results = $cacheDriver->fetch($id);
    }
    // Nếu không có dữ liệu, trong trường hợp dữ liệu được lưu trong bộ nhớ cache bằng null
    if ($ kết quả == vô giá trị) {
    //Chúng tôi lấy dữ liệu
    $kết quả = $ cái này-> thùng chứa-> nhận ("học thuyết")->getManager()->getRepository("NamespaceNameBundle:Thực thể")->findAll();
    // Nếu chúng ta có ID bộ nhớ đệm
    if ($id!= vô giá trị) {
    // Chúng tôi lưu dữ liệu cho ID x và độ trễ y
    $cacheDriver->save($id, $results, intval($delay));
    }
    }
    // Chúng tôi trả lại kết quả bằng cách giới hạn các yêu cầu trong tương lai
    trở lại kết quả $;
    }

Vâng, tôi hy vọng bản ghi nhớ này sẽ giúp bạn. Hẹn gặp lại và cảm ơn bạn đã đọc bài viết này!

★ ★ ★ ★ ★