Có lẽ một cách tiếp cận tốt hơn là kết quả bộ nhớ cache và đọc từ bộ nhớ cache, chỉ nhấn DB khi cần thiết ...
<?php
$cacheKey = 'myCacheNumber1';
if (($data = Cache::read($cacheKey)) === false) {
$data = $this->Model->find('all');
if ($data) {
Cache::write($cacheKey, $data);
}
}
?>
Vấn đề ở đây là nó giả định mô hình và cơ sở dữ liệu kết nối có sẵn cho thời gian khi bộ nhớ cache không tồn tại (hoặc đã hết hạn), và nếu nó không được, bạn vẫn sẽ nhận được các lỗi tương tự, nhưng tần số chắc chắn sẽ được giảm.
Tôi nghĩ rằng để kiểm tra xem DB có sẵn ở tất cả sẽ yêu cầu một số thủ thuật mã tùy chỉnh vì phương pháp lõi bánh của kết nối giả định thành công và thất bại nặng nề khi không có sẵn. Tôi có thể tạo một thành phần với các phương thức kết nối PHP chuẩn để kiểm soát nếu bạn cố gắng tải một mô hình.
<?php
$cacheKey = 'myCacheNumber1';
if (($data = Cache::read($cacheKey)) === false) {
if ($this->DbTest->check('hostname','username','password')) {
$data = $this->Model->find('all');
if ($data) {
Cache::write($cacheKey, $data);
}
}
}
?>
<?php
// app/controllers/components/db_test.php
class DbTestComponent extends Object {
function check($hostname,$username,$password) {
$result = true;
$link = @mysql_connect($hostname,$username,$password);
if (!$link) {
$result = false;
}
@mysql_close($link);
return $result;
}
}
?>
Hmmm. Bạn có cúp cơ sở dữ liệu khổng lồ như vậy mà điều này thực sự cần thiết? Tại sao? –
cơ sở dữ liệu nguồn cấp dữ liệu (giá cổ phiếu DB) Pekka – SMSM