Tiêu đề của câu hỏi này không phải là quá rõ ràng, nhưng mã và câu hỏi là đơn giản.memcached: đó là nhanh hơn, làm thêm (và kiểm tra kết quả), hoặc làm một get (và thiết lập khi trở về false)
Giả sử tôi muốn hiển thị cho người dùng của tôi một quảng cáo một lần mỗi ngày. Để thực hiện điều này, mỗi khi họ truy cập một trang trên trang web của tôi, tôi kiểm tra xem một khóa memcache nào đó có bất kỳ dữ liệu nào được lưu trữ trên đó hay không. Nếu có, không hiển thị quảng cáo. Nếu không, lưu trữ các giá trị '1' trong quan trọng mà với thời hạn của 86400.
tôi có thể làm điều này 2 cách:
//version a
$key='OPD_'.date('Ymd').'_'.$type.'_'.$user;
if($memcache->get($key)===false){
$memcache->set($key,'1',false,$expire);
//show ad
}
//version b
$key='OPD_'.date('Ymd').'_'.$type.'_'.$user;
if($memcache->add($key,'1',false,$expire)){
//show ad
}
Bây giờ, nó có vẻ rõ ràng rằng b là tốt hơn, nó luôn luôn làm cho 1 cuộc gọi memcache. Tuy nhiên, chi phí của "thêm" so với "nhận" là gì? Đây không phải là những so sánh thực sự ... và tôi chỉ tạo ra những con số này, nhưng giả sử 1 thêm ~ = 1 bộ ~ = 5 lấy về nỗ lực và lượt xem trung bình của người dùng 5 trang mỗi ngày:
a: (5 get * 1 effort) + (1 set * 5 effort) = 10 units of effort
b: (5 add * 5 effort) = 25 units of effort
Bạn có nên thực hiện thêm cuộc gọi không? Đây có phải là tối ưu hóa vi mô không cần thiết không?
câu hỏi hay! bạn luôn có thể viết một trường hợp thử nghiệm nhanh chạy cả hai phương pháp 10000 lần để so sánh nhanh chóng ... – oedo
Nếu bộ nhớ cache là một cây b cân bằng tốt, nỗ lực của việc nối khóa có thể làm giảm khả năng tra cứu. Và nỗ lực phục vụ trang có thể làm cho mã này trông giống như hành tinh trái đất khi xem thiên hà Milky Way nếu không phải là vũ trụ. –