Trước khi đọc bài này thì bạn nên nắm qua kiến thức về redis cache nhé.
Để hiểu cách Magento đọc data từ redis cache thì các bạn có thể tiếp cận theo những bước sau đây.
Đầu tiên các bạn nên biết module thao tác với redis cache là colinmollenhour
file path: vendor/colinmollenhour/cache-backend-redis/Cm/Cache/Backend/Redis.php
Hàm load trong file này sẽ load cache từ trong redis ra
file path: \Cm_Cache_Backend_Redis::load
Thử làm một ví dụ:
trước hết thì ở localhost của mình có config redis cache như sau, data nằm ở 2 node: 2 và 3


Giờ load frontend xong debug xem Magento get data như nào nhé
đầu tiên debug tại \Magento\Framework\App\Http::launch, vì mọi request sẽ được bắt đầu từ đây

Lưu ý là request đang debug phải đúng nhé, ví dụ bạn đang load url ở frontend thì kiểm tra lại chắc chắn mình đang debug đúng request đó. Như dưới đây, kiểm tra URI xem có đúng là của frontend không nhé

Tiếp theo đặt debug tại \Magento\PageCache\Model\App\FrontController\BuiltinPlugin::aroundDispatch, lý do là vì mình đang config sử dụng redis cache, và redis cache vẫn Magento được coi là Builtin Cache

Tiếp theo là \Magento\Framework\App\PageCache\Kernel::load

Ở đây các bạn lưu ý cache được save dưới dạng cache key, vậy nên đoạn $this->identifier->getValue() sẽ trả về cache key nhé
Tiếp theo là hàm \Zend_Cache_Core::load trong file path: vendor/magento/zendframework1/library/Zend/Cache/Core.php, xử lý này thuộc về steps trung gian của core nên có thể bỏ qua debug cũng được, vì cuối cùng request sẽ được gửi tới redis để xử lý
Tiếp theo là \Cm_Cache_Backend_Redis::load trong file path: vendor/colinmollenhour/cache-backend-redis/Cm/Cache/Backend/Redis.php

về cơ bản thì đoạn code
$data = $this->_redis->hGet(self::PREFIX_KEY.$id, self::FIELD_DATA);
tương đương với lệnh: hget <key> <field> trong redis

Nếu có data trong redis thì hệ thống sẽ trả ra, nếu không thì hệ thống sẽ load mới – sau đó save lại vào redis cache.
Bài viết này dừng ở đây, bài sau mình sẽ nói về cách Magento save data và cache nhé. !
Bye bye. !