2010-05-26 27 views
8

Tôi đã bắt đầu thử APC để lưu trữ một số dữ liệu cụ thể trên mỗi máy chủ web như là một bổ sung cho memcached.PHP: apc_store không hoạt động như dự định

Tuy nhiên, mảnh mã sau đây được đem lại cho tôi đau đầu:

echo apc_store('key', 'value'); 
echo apc_store('key', 'newvalue'); 
echo apc_fetch('key'); 

// Echoes: value 

Memcached dụ:

$memcached = new Memcached; 

$memcached->addServer('localhost', '11211'); 

$memcached->set('key', 'value1'); 
echo $memcached->get('key') . '<br />'; // Echoes value1 

$memcached->set('key', 'value2'); 
echo $memcached->get('key'). '<br />'; // Echoes value2 

$memcached->set('key', 'value3'); 
echo $memcached->get('key'). '<br />'; // Echoes value3 

Tại sao apc_store không làm việc như đúng?

EDIT: Để chắc chắn rằng không ai khác đang dành hai tiếng đồng hồ trên tìm kiếm một giải pháp, khi điều này được gây ra bởi một lỗi, đây là một: http://pecl.php.net/bugs/bug.php?id=16894&edit=1 (không phải là hiệu quả nhất, mặc dù)

Trả lời

7

Đây có vẻ là vấn đề đã biết: PECL Bug #16814 New warning "Potential cache slam averted for key"

Dường như chỉ cho phép một apc_store() theo yêu cầu. Tôi cố gắng thử nghiệm này:

<?php 

echo "<p>apc_fetch(key): " . apc_fetch('key') . "</p>\n"; 
// echo "<p>apc_store(value): " . apc_store('key', 'value') . "</p>\n"; 
echo "<p>apc_store(newvalue): " . apc_store('key', 'newvalue') . "</p>\n"; 
echo "<p>apc_fetch(key): " . apc_fetch('key') . "</p>\n"; 

Chơi với điều này, bỏ bình luận dòng thứ hai và thấy rằng nó không ghi đè lên một bộ chìa khóa trên một yêu cầu trước đó, nhưng bạn chỉ có thể lưu trữ một chìa khóa cho một lần mỗi yêu cầu.

Nhật ký lỗi đề cập đến cài đặt tệp ini apc.slam_defense khi đặt thành Off có thể vô hiệu hóa hành vi ghi một lần này. Nhưng tôi đã thử nó một thời gian ngắn và tôi không thể xác nhận tác phẩm này. Có lẽ bạn sẽ có nhiều may mắn hơn (nhớ khởi động lại Apache khi bạn thay đổi php.ini).

+0

Có thể tưởng tượng rằng nó là một cái gì đó kỳ lạ như thế này. Cảm ơn rất nhiều vì sự giúp đỡ của bạn, Bill! – Industrial

+0

Bằng cách này, đã có một chút slack trên cây mySQL mà tôi hỏi bạn về một số thời gian trước đây ở đây trên SO. Bạn đang nói rằng bạn chuẩn bị làm một số ví dụ về cây trên Github. Có gì mới không? – Industrial

+0

Cập nhật bài đăng của tôi với liên kết đến giải pháp có thể giúp bạn hoặc bất kỳ ai khác bị kẹt trong cùng một tình huống và PHẢI sử dụng APC – Industrial

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