2010-04-11 31 views
6

Tôi đang nghiên cứu khả năng sử dụng memcached như một lưu trữ phiên cho một hệ thống được xây dựng trên CodeIgniter. Có ai đã làm điều này trước đây (đó có lẽ là một câu hỏi ngu ngốc :) và nếu như vậy folks kinh nghiệm của bạn là gì? Bạn đã sử dụng bất kỳ thư viện/tiện ích mở rộng hiện có nào chưa? Theo như cải thiện hiệu suất, bạn đã thấy gì? Bất kỳ cảnh báo nào?Sử dụng memcached như một lưu trữ phiên với CodeIgniter

Trả lời

6

Có PHP đặt phiên thành Memcache trực tiếp, chứ không phải thông qua mã khuôn khổ rất dễ dàng - nó chỉ thay đổi hai dòng trong php.ini:

# see http://php.net/manual/en/memcache.ini.php 
session.save_handler = memcache 
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15" 

này sử dụng hơi cũ (nhưng vẫn hoàn toàn được hỗ trợ) phần mở rộng 'memcache' từ PECL.

1

Bạn có thể chọn CodeIgniter Multicache Thư viện, có thể được tìm thấy ở đây: http://www.haughin.com/code/multicache/

Trong đoạn mã bạn có thể sử dụng đơn giản như thế này:

$this->load->library('cache'); 
//To use memcache 
$this->cache->useMemcache($iptomemcache, $port); /*if you want, you can check to see if the connection even worked, as this will return false if the connection failed.*/ 
$this->cache->save('testkey', 'testdata', NULL, 3600); /*caches the testdata string for 1 hour. */ 
echo $this->cache->get('testkey'); 
//To switch back to file based caching 
$this->cache->useFile(); 
//etc. 
-3

Đó là không thực tế để sử dụng Memcached cho việc lưu trữ của dữ liệu quan hệ (như MySQL); nó sẽ không hiệu quả để yêu cầu mỗi mục từ Memcached và sau đó kiểm tra xem nó có khớp với một truy vấn hay không. Có những giải pháp tốt hơn cho một vấn đề như vậy (ví dụ, xem xét các bảng bộ nhớ trong MySQL).

Mặt khác, nếu bạn đang tìm kiếm lưu trữ khóa/giá trị đơn giản, đó chắc chắn là một ứng dụng thực tế cho Memcached. Tuy nhiên, những gì tôi muốn được một chút cảnh giác là viết một trình điều khiển CodeIgniter cho nó. Giao diện cho Memcached trong PHP đã chết đơn giản:

$memcached->get('my key'); 
$memcached->set('my key', 'my value'); 

Tôi khuyên bạn chỉ nên sử dụng các lớp Memcached trực tiếp. Thêm tất cả các chi phí thêm vào CI chỉ có vẻ bẩn và không cần thiết cho tôi.

Mặt khác, tôi đã thấy việc triển khai Memcached được sử dụng cho công cụ phiên của CodeIgniter. Đó chắc chắn là một lý do rất hợp lý để viết một người lái xe, và tôi sẽ rất khuyến khích nó (phiên là một cơn đau ở cổ để quy mô).

Chúc may mắn

Các vấn đề liên quan