Friday, May 31, 2013

PHP làm việc với Memcached trong Code Igniter

Về cơ bản có thể làm việc trực tiếp với Memcached mà không cần cấu hình trong Code Igniter (CI) vì PHP hỗ trợ Memcached trực tiếp. Cú pháp cơ bản của việc tương tác giữa PHP và Memcached là:
 $memcache->connect('localhost', 11211) or die ("Could not connect"); //connect to memcached
 $memcache->get($key_total0051); //to get a key
 $memcache->set($key_total0051, 182918291829, MEMCACHE_COMPRESSED, 600); //store in 600 seconds.

Một chương trình ví dụ đơn giản là:
 <?php
    $key_total0051 = md5("MEMCACHE_KEY_total0051"); //create a key
    $memcache = new Memcache; //init memcache
    $memcache->connect('localhost', 11211) or die ("Could not connect"); //connect to memcached
    $result = $memcache->get($key_total0051); //to get a key
    if($result) {
        echo 'Đã có key: ' . $result;
    } else {
        echo 'Chưa có key. Thực hiện tạo key.';
        $memcache->set($key_total0051, 182918291829, MEMCACHE_COMPRESSED, 600); //store in 10 mins
    }
?>
Thuật toán rất đơn giản, trước tiên khởi tạo và kết nối tới memcached sau đó đọc giá trị của 1 key. Nếu key này tồn tại dẫn đến giá trị trả về khác null thì in key đó ra màn hình. Nếu key chưa tồn tại thì cảnh báo cho người dùng và chèn key mới.
Tuy nhiên nếu đang dùng CI thì có thể cấu hình và sử dụng CI một cách thuận tiện hơn theo cách dưới đây. Câu lệnh cơ bản để tương tác với Memcached từ CI là:
$key_total0051 = md5("MEGACARD_STATISTICS_MEMCACHE_KEY_total0051");
$this->cache->memcached->save($key_total0051, $result->total0051, 1200);
$mem_total0051 = $this->cache->memcached->get($key_total0051);

Trước tiên cần cấu hình cho CI biết địa chỉ và cổng của Memcached sẽ sử dụng. Các cấu hình này được lưu theo đường dẫn:
application/config/memcached.php 
với nội dung là khai báo các memcaches:
<?php

  if (!defined('BASEPATH')) exit('No direct script access allowed');

  $config['memcached'] = array(
          'hostname' => MEMCACHE_SERVER,
          'port'     => MEMCACHE_PORT,
          'weight'   => 1
  );

trong đó các hằng số đã được định nghĩa trong file constant.php:
define('MEMCACHE_SERVER', "127.0.0.1");
define('MEMCACHE_PORT', "11211");

Sau khi đã cấu hình xong ta không cần lệnh khởi tạo Memcache mỗi lần muốn làm việc với Memcache nữa. Một ví dụ đơn giản như sau:
<?php
    $key_total0051 = md5("MEMCACHE_KEY_total0051"); //define key
    $this->cache->memcached->save($key_total0051, 83298527, 1200); //store in memcache for 1200 secs
    $mem_total0051 = $this->cache->memcached->get($key_total0051); //get key out

    if(!$mem_total0051){
        echo "No key found. Check configurations.";
    }
?>
Với các giới thiệu đơn giản trên ta đã có thể tương tác với Memcached sử dụng ngôn ngữ PHP trong Framework Code Igniter.

No comments:

Post a Comment