"Nhưng những gì tốt là bộ nhớ đệm một truy vấn không?", Bạn có thể tự hỏi. Nó không giống như hầu hết mọi người sẽ tìm kiếm một và cùng một điều thường xuyên.
Vâng ... như một vấn đề của thực tế, không chỉ có nghiên cứu chỉ ra rằng họ thường sẽ tìm kiếm một và điều tương tự (Phản ứng được xu hướng dòng đột ngột của "phản ứng" truy vấn?), Họ cũng sẽ tìm kiếm rất đáng tin cậy cho các tác giả nhiều tác phẩm (hoặc bản thân ). Xem xét thực tế rằng việc thực hiện bộ nhớ cache này chi phí cho chúng tôi theo nghĩa đen không có gì (và thực sự làm giảm chi phí bằng cách giảm căng thẳng trên các máy chủ), thêm nó vào là một chiến thắng dễ dàng, ngay cả khi nó không được sử dụng thường xuyên như một hy vọng. Không có lý do để không thêm nó - nó chỉ có lợi cho chúng tôi.
Với những vấn đề được xác định rõ ràng, chúng ta hãy xử lý các điều kiện tiên quyết.
Cài đặt
Trước tiên, chúng ta cần phải cài đặt Redis vào quá trình phát triển và môi trường sản xuất (lưu ý rằng nếu bạn đang sử dụng Homestead phát triển địa phương, Redis đã được cài đặt, mặc dù v 3.0.1 tại thời điểm viết bài).
Chúng tôi có thể làm điều này thông qua quản lý gói của hệ điều hành như vậy:
Code:
sudo apt-get install redis-server
Đây là phương pháp đơn giản nhất và được đề nghị, nhưng chúng ta cũng có thể cài đặt nó từ đầu và tự cấu hình nó. Theo hướng dẫn trên trang web của họ, điều này được thực hiện thông qua:
Code:
sudo apt-get install gcc make build-essential tcl
wget http://download.redis.io/releases/redis-3.0.2.tar.gz
tar xzf redis-3.0.2.tar.gz
cd redis-3.0.2
make
make test
sudo make install
Nếu bạn chạy vào một lỗi nghiêm trọng nhắc đến jemalloc.h sau khi chạy làm chỉ chạy làm distclean và sau đó thực hiện một lần nữa. Các lệnh kiểm tra make là tùy chọn, nhưng hữu ích.
Lưu ý: Nếu bạn đang đọc này và phiên bản 3.0.2 không còn là mới nhất, chỉ cần thích ứng với các lệnh đến các số phiên bản mới nhất.
Để ngăn chặn một số cảnh báo thông thường (trên Ubuntu ít nhất), chúng tôi cũng preventatively chạy các lệnh sau:
Code:
sudo sh -c 'echo "vm.overcommit_memory=1" >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.somaxconn=65535" >> /etc/sysctl.conf'
sudo sh -c 'echo "never" > /sys/kernel/mm/transparent_hugepage/enabled'
Chúng tôi cũng chắc chắn rằng lệnh cuối cùng được thêm vào /etc/rc.local ngay trên exit 0, vì vậy mà nó được tái phát hành trên mỗi khởi động lại máy chủ. Cuối cùng, chúng ta có thể khởi động lại máy chủ với sudo reboot và kiểm tra xem mọi thứ đều tốt bằng cách chạy Redis với sudo redis-server.
Cuối cùng, chúng ta cần phải chắc chắn Redis bắt đầu sau khi khởi động lại máy chủ, vì vậy chúng tôi làm theo hướng dẫn chính thức của họ để có được thành tựu.
Predis
Chúng tôi bao gồm các vấn đề cơ bản của Predis trước, và chúng tôi sẽ sử dụng nó trong trường hợp này, quá. Hãy cài đặt nó với:
Code:
composer require predis/predis
>> Khóa học lập trình php cơ bản tại hà nội !
Đi xa hơn, giả định là chúng ta đã hấp thụ những kiến thức từ việc giới thiệu nói trên để Predis.
Kể từ khi bài viết đó đã được xuất bản, sự khác biệt nhỏ đã được giới thiệu (như một sự chuyển tiếp không gian tên) nhưng API của chúng ta cần là nhiều hơn hoặc ít hơn như vậy.
Thực hiện
Để sử dụng ứng dụng của chúng tôi trong Redis, chúng ta cần phải làm theo thủ tục này:
- Xem nếu kết quả cho truy vấn hiện nay tồn tại trong bộ nhớ cache
- Nếu có, lấy chúng
- Nếu không, lấy chúng, lưu trữ chúng, chuyển chúng đến các phần còn lại của ứng dụng
Vì vậy, việc thực hiện cực kỳ đơn giản: dưới hình thức "đệ trình" kiểm tra (một trong đó sẽ cho "tìm kiếm" param), chúng tôi nhanh chóng các khách hàng Predis, tính toán hash md5 của các truy vấn tìm kiếm được thực hiện, và sau đó kiểm tra nếu kết quả cho nó đã được lưu trữ. Nếu sai, các dòng trước đó tiếp tục, chỉ, thay vì kết thúc vào:
Code:
$result = ...
$info = ...
chúng ta tuần tự và lưu kết quả trực tiếp vào bộ nhớ cache. Sau đó, ngay lập tức bên ngoài khối, chúng tôi lấy chúng từ cache và lưu lượng của ứng dụng vẫn tiếp tục như bình thường. Phần thay đổi của tập tin index.php do đó trông như thế này:
Code:
// Check if the search form was submitted
if (isset($queryParams['search'])) {
$redis = new Client();
$hash = md5($_SERVER['QUERY_STRING']);
if (!$redis->get($hash . '-results')) {
$diffbot = new Diffbot(DIFFBOT_TOKEN);
// Building the search string
$searchHelper = new SearchHelper();
$string = (isset($queryParams['q']) && !empty($queryParams['q']))
? $queryParams['q']
: $searchHelper->stringFromParams($queryParams);
// Basics
$search = $diffbot
->search($string)
->setCol('sp_search')
->setStart(($queryParams['page'] - 1) * $resultsPerPage)
->setNum($resultsPerPage);
$redis->set($hash . '-results', serialize($search->call()));
$redis->expire($hash . '-results', 86400);
$redis->set($hash . '-info', serialize($search->call(true)));
$redis->expire($hash . '-info', 86400);
}
$results = unserialize($redis->get($hash . '-results'));
$info = unserialize($redis->get($hash . '-info'));
Sau khi thử nghiệm, chúng ta có thể thấy rằng nó hoạt động như một say mê - một truy vấn thực hiện một lần là ngay lập tức nếu chúng tôi làm mới trang, hoặc thực hiện một truy vấn và sau đó trở lại phần trước đó. Cuối cùng, chúng ta có thể thêm, cam kết, và đẩy triển khai:
Code:
git add -A
git commit -m "Added Redis cache [deploy:production]"
git push origin master
Đó là nó! Phiên bản mới nhất của ứng dụng của chúng tôi bây giờ là sống và Redis được phục vụ dữ liệu lưu trữ. Kiểm tra nó ở đây!
Lưu ý: Nếu bạn đang tự hỏi làm thế nào chúng tôi nhận được từ chế độ phát triển để triển khai sản xuất trong một cam kết duy nhất, bạn nên đọc.
Điều chỉnh Fine
Đối với một hiệu suất tăng thêm, Predis khuyến cáo cài đặt của phpiredis, một phần mở rộng PHP để "hạ thấp chi phí của việc tuần tự và phân tích các giao thức Redis". Nhìn thấy như chúng tôi đang ở trong kiểm soát của máy chủ, tại sao không?
Code:
cd ~
git clone https://github.com/redis/hiredis
cd hiredis
make
sudo make install
cd ~
git clone https://github.com/nrk/phpiredis
cd phpiredis
phpize && ./configure --enable-phpiredis
make
sudo make install
sudo touch /etc/php5/mods-available/phpiredis.ini
sudo sh -c 'echo "extension=phpiredis.so" > /etc/php5/mods-available/phpiredis.ini'
sudo php5enmod phpiredis
sudo service php5-fpm
Điều này được cài đặt các điều kiện tiên quyết và kích hoạt phần mở rộng. Bây giờ tất cả chúng ta phải làm là cấu hình máy khách Predis để sử dụng kết nối phpiredis. Chúng tôi cần phải thay thế:
Code:
$redis = new Client();
với
Code:
$redis = new Client('tcp://127.0.0.1', [
'connections' => [
'tcp' => 'Predis\Connection\PhpiredisStreamConnection',
'unix' => 'Predis\Connection\PhpiredisSocketConnection',
],
]);
Đó là nó! Cài đặt Redis chúng tôi bây giờ thậm chí còn nhanh hơn!
Lời kết
Trong hướng dẫn này, chúng tôi sử dụng Redis kết hợp với thư viện Predis để cung cấp cho một ứng dụng đã được triển khai sự xuất hiện của tốc độ. Chúng tôi tận dụng RAM có sẵn của giọt DigitalOcean của chúng tôi để lưu các kết quả của một truy vấn mỗi ngày một lần, và sau đó trả lại những kết quả từ bộ nhớ cache hơn là làm những chuyến đi vòng quanh nguồn gốc của họ. Điều này có nghĩa là kết quả không phải lúc nào cũng tươi, nhưng theo bài này, kết quả không được làm mới thường xuyên hơn dù sao đó.
Hy vọng rằng, bài viết này chỉ cho bạn cách đơn giản nó là thêm một lớp bộ nhớ đệm trong bộ nhớ để ứng dụng của bạn, và sẽ được sử dụng khi bạn cần phải rút ngắn những lần tải và giảm thiểu những chi phí máy chủ.
>> Khóa học lập trình android !