Redis là gì?

Redis là một phần mềm mã nguồn mở có chức năng lưu trữ dữ liệu dạng Key-value trên bộ nhớ, giúp truy xuất dữ liệu nhanh chóng.

Redis lưu trữ dữ liệu trên RAM. Do đó tốc độ đọc ghi nhanh hơn rất nhiều lưu trên bộ nhớ. Ngoài ra, Redis có thể sao lưu dữ liệu trên đĩa cứng để có thể phục hồi khi gặp sự cố, ví dụ như server bị tắt nguồn hoặc cần phải khởi động lại server. Redis cung cấp 2 phương thức chính cho việc sao lưu dữ liệu ra ổ cứng, đó là RDB (Redis DataBase file) và AOF.

-RDB thực hiện tạo và sao lưu snapshot của DB vào ổ cứng sau mỗi khoảng thời gian nhất định.

-AOF lưu lại tất cả các thao tác write mà server nhận được, các thao tác này sẽ được chạy lại khi restart server hoặc tái thiết lập dataset ban đầu.

Vì sao nên dùng Redis thay vì cache mặc định của hệ thống Magento 2?

Như mình đã trình bày ở trên, Redis lưu trữ dữ liệu trên RAM và đọc ra từ RAM. Do đó tốc độ truy xuất rất nhanh so với lưu trữ bằng file nếu dùng cache mặc định của Magento. Full Page Cache mặc định của Magento đọc dữ liệu tử ổ đĩa cứng sẽ cho tốc độ kém hơn trên Redis.

Rõ ràng như hình ảnh trên ta thấy tốc độ đọc trên RAM nhanh hơn gấp 10 lần trên ổ SSD (loại thông thường) và gấp 50 lần trên HDD. Như vậy nếu ta lưu trữ dữ liệu cache trên Redis, tốc độ ghi và truy xuất data cũng sẽ nhanh như vậy nếu so với default cache chỉ lưu data vào file trên ổ cứng đơn thuần.

Speed

Như vậy, nếu ta dùng Redis như một nơi để lưu trữ cache thay vì lưu trữ file trên ổ đĩa cứng, tốc độ xử lý dữ liệu qua cache sẽ tăng lên đáng kể. Khi có nhiều lượng truy cập, việc đọc ghi tử RAM cũng tiết kiệm được thời gian rất nhiều. Hãy thử tưởng tượng trang web của bạn có 1 triệu người truy cập, thì việc tối ưu này sẽ tăng lên rất nhiều.

Cài đặt Redis

Việc đầu tiên tất nhiên ta cần phải cài và cấu hình Redis

Mọi người có thể follow theo hướng dẫn ở đây về cách cài đặt Redis

Trên ubuntu, ta có thể dùng câu lệnh sau để cài từ apt

sudo apt update

sudo apt install redis-server

Chờ một lúc để redis được cài trên server của bạn.

Bước tiếp theo ta cần cấu hình redis bằng cách edit file sau:

sudo nano /etc/redis/redis.conf

Tìm tới dòng supervised và sửa giá trị thành systemd

Cấu hình Redis


Sau đó, ta cần khởi động lại service redis để có thể cập nhật được cấu hình mới này.

sudo systemctl restart redis.service

Kết nối Redis với Magento

Để kết nối Redis, ta sẽ sử dụng câu lệnh sau ở Magento CLI:

- Sử dụng Redis cho default cache

bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-server=127.0.0.1 --cache-backend-redis-db=0

- Tiếp theo là sử dụng Redis cho Page cache:

bin/magento setup:config:set --page-cache=redis --page-cache-redis-server=127.0.0.1 --page-cache-redis-db=1

Sau hai câu lệnh đó, magento sẽ tự động sửa file app/etc/env.php để chèn đoạn sau vào:

- Sử dụng Redis cho việc lưu trữ session:

bin/magento setup:config:set --session-save=redis --session-save-redis-host=127.0.0.1 --session-save-redis-log-level=4 --session-save-redis-db=2

Để check dữ liệu magento đẩy lên trên redis, ta có thể dùng một tool để trực quan hóa. Ở đây mình recommend mọi người tool có tên là Redis Desktop Manager:

https://rdm.dev/

Cách cài các bạn có thể theo hướng dẫn ở đây. Rất dễ dàng để cài đặt.

Mở lên giao diện Redis Desktop Manager sẽ như sau:

Giao diện Redis Desktop Manager


Ta sẽ chọn local mở mở db0 ra để xem.

Redis data

Ta sẽ thấy các key và value được Magento 2 đẩy lên trên Redis. Như vậy từ bây giờ, magento sẽ lấy giá trị từ redis ra để làm cache. Tốc độ truy xuất cache sẽ nhanh lên đáng kể so với truy xuất data từ ổ cứng.


Ngoài ra, ta cũng hoàn toàn có thể kiểm tra quá trình hoạt động của redis bằng các câu lệnh command:


Mở terminal lên và gõ:

redis-cli monitor

Nếu sử dụng redis để lưu session, mọi người sẽ thấy đoạn sau:


1476824834.187250 [0 127.0.0.1:52353] "select" "0"

1476824834.187587 [0 127.0.0.1:52353] "hmget" "sess_sgmeh2k3t7obl2tsot3h2ss0p1" "data" "writes"

1476824834.187939 [0 127.0.0.1:52353] "expire" "sess_sgmeh2k3t7obl2tsot3h2ss0p1" "1200"

1476824834.257226 [0 127.0.0.1:52353] "select" "0"

... more ...

Nếu sử dụng Redis cho cache:

1476826133.810090 [0 127.0.0.1:52366] "select" "1"

1476826133.816293 [0 127.0.0.1:52367] "select" "0"

1476826133.817461 [0 127.0.0.1:52367] "hget" "zc:k:ea6_GLOBAL__DICONFIG" "d"

1476826133.829666 [0 127.0.0.1:52367] "hget" "zc:k:ea6_DICONFIG049005964B465901F774DB9751971818" "d"

1476826133.837854 [0 127.0.0.1:52367] "hget" "zc:k:ea6_INTERCEPTION" "d"

1476826133.868374 [0 127.0.0.1:52368] "select" "1"

1476826133.869011 [0 127.0.0.1:52369] "select" "0"

1476826133.869601 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DEFAULT_CONFIG_CACHE_DEFAULT__10__235__32__1080MAGENTO2" "d"

1476826133.872317 [0 127.0.0.1:52369] "hget" "zc:k:ea6_INITIAL_CONFIG" "d"

1476826133.879267 [0 127.0.0.1:52369] "hget" "zc:k:ea6_GLOBAL_PRIMARY_PLUGIN_LIST" "d"

1476826133.883312 [0 127.0.0.1:52369] "hget" "zc:k:ea6_GLOBAL__EVENT_CONFIG_CACHE" "d"

1476826133.898431 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DB_PDO_MYSQL_DDL_STAGING_UPDATE_1" "d"

1476826133.898794 [0 127.0.0.1:52369] "hget" "zc:k:ea6_RESOLVED_STORES_D1BEFA03C79CA0B84ECC488DEA96BC68" "d"

1476826133.905738 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DEFAULT_CONFIG_CACHE_STORE_DEFAULT_10__235__32__1080MAGENTO2" "d"

... more ...


Đây là quá trình hoạt động của redis một cách real time. Mọi người có thể xem để debug các lỗi xảy ra nếu có. Và bây giờ, hãy thử truy cập frontend của Magento 2 và trải nghiệm tốc độ :)

Hãy đăng ký nhận tin để là người đầu tiên đọc bài viết mới nhất từ chúng tôi nhé

Posted 
 in 
Tech
 category

Bài viết khác từ

Tech

category

View All