2010-05-17 12 views
5

Sử dụng phần mở rộng PHP pecl/memcached mới hơn. Các cuộc gọi đến Memcached :: setOption() như;PHP pecl/memcached extension chậm khi thiết lập tùy chọn cho băm đồng nhất

$m = new Memcached(); 
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT); 

được chi phí từ 150 đến 500ms - chỉ trong việc đưa ra lời kêu gọi setOption() và như chúng ta không sử dụng kết nối liên tục mà là làm điều này trên tất cả các yêu cầu, điều đau khổ.

Xóa sâu hơn, đặt Memcached :: OPT_DISTRIBUTION thành Memcached :: DISTRIBUTION_CONSISTENT kết thúc gọi update_continuum() trong libmemcached có vẻ khá chuyên sâu, mặc dù chúng tôi chỉ chuyển danh sách 15 máy chủ ghi nhớ, vì vậy có phần đáng ngạc nhiên thấy nó mất từ ​​150 đến 500ms để xây dựng lại cấu trúc dữ liệu liên tục.

Có thể thiết lập tùy chọn này chỉ thích hợp cho các kết nối liên tục, nơi nó được gọi chỉ một lần trong khi thực hiện kết nối ban đầu? Hay đây có phải là một lỗi không?

Sử dụng tiện ích pecl/memcached mới hơn 1.0.1 với libmemcached 0.38

Cảm ơn.

+0

Tốt nhất là nên báo cáo vấn đề này trực tiếp đến Andrei: https://github.com/andreiz/php-memcached – Till

Trả lời

2

libmemcached 0,38 là khá cũ tại thời điểm này. Vì vậy, là pecl/memcached 1.0.1. Bạn có thể thử pecl/memcached 2.0.0b1 phát hành từ github?

0

Vấn đề tương tự với pecl/memcached 2.2.0 (mới nhất từ ​​PECL khi viết). Giải pháp duy nhất đối với tôi là để chuyển đổi từ DISTRIBUTION_CONSISTENT tới:

$memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true); 
$memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true); 

Có vẻ như để làm việc tốt:

var_dump($memcached->getServerByKey($key)['host']); 
// string '192.168.56.1' (length=12) <== dead host 

$memcached->set($key, $result, 3600); 

var_dump($memcached->getServerByKey($key)['host']); 
// string '127.0.0.1' (length=9) <== working host 

var_dump($memcached->getLastErrorMessage()); 
// string 'SUCCESS' (length=7) 
Các vấn đề liên quan