BẠN ĐÃ NGHE VỀ BITCOIN VÀ MUỐN TÌM HIỂU CHÍNH THỐNG?

HƯỚNG DẪN TOÀN TẬP ĐẦU TƯ VỚI THỊ TRƯỜNG BITCOIN 2021

>> Xem tại đây <<

memcache

Áp dụng memcache trong PHP và MySQL

Xem lại bài trước để tìm hiểu memcache là gì và cách hoạt động của memcache ra sao, hôm nay mình tiếp tục hướng dẫn các bạn áp dụng memcache trong PHP và MySQL để tăng tốc độ website.

1. Kết nối tới Cache Server

Việc đầu tiên để có thể sử dụng được memcache chính là tạo kết nối đến Cache Server. Sử dụng đoạn code dưới đây để kết nối đến Cache Server

// Định nghĩa thông tin kết nối
define('MEMCACHED_HOST', '127.0.0.1');
define('MEMCACHED_PORT', '11211');
 
// Khỏi tạo kết nối memcache
$memcache = new Memcache;
$cacheAvailable = $memcache->connect(MEMCACHED_HOST, MEMCACHED_PORT);

2. Lưu trữ dữ liệu vào Cache

Ở đây mình thử lấy ví dụ về cách insert 1 sản phẩm xuống database MySQL theo kiểu truyền thống, bằng câu lệnh SQL như dưới đây :

$sql = "INSERT INTO products (id, name, description, price) VALUES ($id, '$name', '$description', $price)";
$querySuccess = mysqli_query($conn, $sql);

Nhưng ở đây, chúng ta đang áp dụng Memcache vào PHP và MySQL để tăng tốc độ truy xuất dữ liệu, nên khi insert 1 sản phẩm xuống db, ta sẽ vừa lưu xuống db, đồng thời cũng lưu vào memcache.

//Insert dữ liệu xuống db
$sql = "INSERT INTO products (id, name, description, price) VALUES ($id, '$name', '$description', $price)";
$querySuccess = mysql_query($sql, $db);
 
//Nếu như insert thành công, lưu dữ liệu như $name, $description, $price vào memcache
if ($querySuccess === true)
{
    // Tạo key cho memcache
    // Sử dụng string 'product_' cộng với $id để làm key dùng cho việc truy xuất sau này (ví dụ key là "product_12")
    $key = 'product_' . $id;
 
    // Lưu trữ thông tin sản phẩm vào 1 mảng
    $product = array('id' => $id, 'name' => $name, 'description' => $description, 'price' => $price);
 
    // Thực thi việc lưu mảng dữ liệu đó vào memcache bằng biến $memcache
    $memcache->set($key, $product);
}

 3. Truy xuất dữ liệu với memcache

Đây chính là bước cho các bạn thấy rõ hiệu suất mà memcache đem lại cho hệ thống website của chúng ta. Thay vì truy xuất dữ liệu trực tiếp từ DB một cách nặng nề, thì chúng ta lại truy xuất dữ liệu từ cache, tốc độ truy xuất sẽ rất nhanh và rất hiệu quả.

Theo cách truyền thống, muốn lấy lên thông tin 1 sản phẩm, ví dụ ở đây là sản phẩm có id là 12, chúng ta sẽ làm như sau :

$sql = "SELECT id, name, description, price FROM products WHERE id = " . $id;
$queryResource = mysqli_query($conn, $sql);
$product = mysqli_fetch_assoc($queryResource);

Khi áp dụng memcache vào, đoạn code của chúng ta sẽ trở thành như sau :

// Khởi tạo biến $product = null
$product = null;
 
// Đầu tiên,kiểm tra dữ liệu có tồn tại trong cache của chúng ta hay không ?
// Kiểm tra biến $cacheAvailable đã được khởi tạo ở mục 1 có thành công không (true), ngược lại là (false) 
if ($cacheAvailable == true)
{
    // Sử dụng key để lấy value là thông tin của product
    $key = 'product_' . $id;
 
    // Lấy thông tin product thông qua key
    $product = $memcache->get($key);
}
 
// Nếu biến product bằng null thì lúc này chúng ta mới lấy dữ liệu từ db
if (!$product)
{
    //Đọc dữ liệu từ db
    $sql = "SELECT id, name, description, price FROM products WHERE id = " . $id;
    $queryResource = mysqli_query($conn, $sql);
    $product = mysqli_fetch_assoc($queryResource);
}

Đoạn code trên cho thấy, nếu như dữ liệu cần lấy lên đã tồn tại trong cache, thì chúng ta lấy ngay từ Cache Server của chúng ta, ngược lại thì mới lấy dữ liệu trực tiếp từ db, điều này sẽ làm giảm kết nối đến db, tối ưu tốc độ website, tránh gây ra hiện tượng quá tải website.

4. Kết luận

Đến đây thì các bạn cũng đã thấy được lợi ích to lớn mà memcache đem laị. Memcache thường được ứng dụng trong các hệ thống lớn, để tăng tốc website của bạn. Ở ví dụ trên mình chủ yếu nêu về Memcahe trong PHP và MySQL, còn đối với các ngôn ngữ khác nhu C/C++, Java, Python, Ruby, Postgress, Erlang,… cũng hoạt động tương tự dựa trên cơ chế này, các bạn có thể đọc thêm ở đây https://code.google.com/p/memcached/wiki/Clients. Cám ơn các bạn đã đọc bài viết, nếu có bất kỳ thắc mắc nào thì comment bên dưới nhé. Thân!

Nguồn : kungfuphp.com

 


Bình luận trực tiếp ↓

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *