Now I share with everyone how we can use Redis in PHP. We know what Redis is, right? In Programming, you've probably seen it somewhere before.
I just learned it recently and wanted to share a bit of knowledge with you. I'll save it here, sometimes we need it
Subscribe to Hòa Nguyễn Coder's YouTube channel
Demo :
Set up Redis from Docker Compose
# Định nghĩa phiên bản của Docker Compose.
# Phiên bản 3.8 hỗ trợ các tính năng mới nhất (tương thích với Docker Engine hiện đại).
version: '3.8'
services: # Chứa định nghĩa của từng dịch vụ.
app: # chạy PHP (với Dockerfile được xây dựng tùy chỉnh)
build:
args:
user: thanhhoa # Truyền các biến user và uid vào Dockerfile (sử dụng trong lệnh ARG).
uid: 1000
context: . # Chỉ định thư mục hiện tại làm chứa Dockerfile
dockerfile: DockerfileV2 # Xây dựng image PHP từ Dockerfile
working_dir: /var/www/html #Thiết lập thư mục làm việc trong container là /var/www/html
volumes:
- .:/var/www/html # Gắn thư mục mã nguồn từ máy host (.) vào container tại /var/www/html
- ./php-config/conf:/usr/local/etc/php/conf.d/ # Đồng bộ cấu hình PHP từ máy host
environment: # Thiết lập các biến môi trường cho kết nối MySQL
DB_HOST: db # Tên của dịch vụ cơ sở dữ liệu (db)
DB_DATABASE: db_hoanguyencoder
DB_USERNAME: hoanguyencoder
DB_PASSWORD: 12345678
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: 12345678
networks:
- networkHoaCoder # Kết nối dịch vụ này vào mạng , ví dụ : networkHoaCoder
depends_on:
- redis
db:
platform: linux/amd64 # Đảm bảo sử dụng kiến trúc amd64 (trong Mac M1)
image: mysql:5.7 # Sử dụng hình ảnh MySQL 5.7
restart: always # Tự động khởi động lại nếu container gặp sự cố.
environment:
MYSQL_ROOT_PASSWORD: 12345678 # Mật khẩu cho tài khoản root
MYSQL_DATABASE: db_hoanguyencoder # Tạo cơ sở dữ liệu khi khởi động
MYSQL_USER: hoanguyencoder # Tài khoản người dùng
MYSQL_PASSWORD: 12345678 # Mật khẩu cho tài khoản người dùng
ports:
- "3306:3306" # Map cổng 3306 (cổng mặc định của MySQL) trên container với máy host
volumes:
- 'db-mysql:/var/lib/mysql' # db-mysql: Volume lưu trữ dữ liệu MySQL.
# Tệp db_hoanguyencoder.sql từ máy host sẽ được nạp khi container khởi động (đặt vào /docker-entrypoint-initdb.d/).
- ./db_hoanguyencoder.sql:/docker-entrypoint-initdb.d/db_hoanguyencoder.sql
networks:
- networkHoaCoder # Kết nối dịch vụ vào mạng networkHoaCoder
redis:
image: redis:latest # Sử dụng hình ảnh Redis mới nhất từ Docker Hub.
container_name: redis # Đặt tên container là redis.
restart: always # Đảm bảo container tự động khởi động lại nếu bị dừng (do lỗi hoặc restart hệ thống).
ports:
- "6379:6379" # Map cổng 6379 của máy host sang container. Đây là cổng mặc định Redis sử dụng
volumes:
- /redis/dаta:/root/redis
- /redis/redis.conf:/usr/local/etc/redis/redis.conf
environment:
- REDIS_PASSWORD=12345678
- REDIS_PORT=6379
- REDIS_DATABASES=16
networks:
- networkHoaCoder
nginx: # Máy chủ web xử lý các yêu cầu HTTP và chuyển tiếp đến PHP (FPM)
image: nginx:latest # Sử dụng phiên bản mới nhất của Nginx.
ports:
- "8080:80" # Map cổng 80 trong container với cổng 8080 trên máy host
volumes:
- .:/var/www/html # Gắn thư mục mã nguồn (.) vào /var/www/html
- ./nginx.conf:/etc/nginx/nginx.conf # Gắn tệp cấu hình Nginx từ máy host vào container tại /etc/nginx/nginx.conf
depends_on:
- app # Đảm bảo dịch vụ app khởi động trước khi Nginx chạy.
networks:
- networkHoaCoder # Kết nối dịch vụ này vào mạng networkHoaCoder.
networks:
networkHoaCoder:
driver: bridge # driver: bridge: Tạo một mạng kiểu bridge, cho phép các container trong mạng này giao tiếp với nhau.
volumes:
db-mysql:
driver: local # driver: local: Volume lưu trữ dữ liệu MySQL để không bị mất khi container dừng.
In the Docker Compose code above, you see where you configured the app and redis, it must configure the environment variables to match each other, and it must be on the same network.
To run the docker-compose.yml file, you can run the following command:
docker-compose up --build
\\or
docker-compose up --d
Install the predis/predis library
After running docker-compose.yml, you will get a list of containers as follows:
E:\FullStackDeveloper\PHP Tips and Tricks (main -> origin)
λ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1756a775b2d9 nginx:latest "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp phptipsandtricks-nginx-1
4ed4b74c8b4b phptipsandtricks-app "docker-php-entrypoi…" 2 hours ago Up 2 hours 9000/tcp phptipsandtricks-app-1
33605e421bed redis:latest "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp redis
63b478befc6b mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, 33060/tcp phptipsandtricks-db-1
If you look above you will see the container names Redis, MySQL and Nginx, app. To execute into the Redis environment, use the following:
E:\FullStackDeveloper\PHP Tips and Tricks (main -> origin)
λ docker exec -it redis sh
# redis-cli
127.0.0.1:6379> AUTH 12345678
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
You see ping -> PONG means success
AUTH 12345678, I entered the password for it. you can set a password for it with the following command:
127.0.0.1:6379> CONFIGURATION SETTINGS request pass "12345678"
Using Redis in PHP
We need to install the library:
composer require predis/predis
To install the above library, you need to run into the container containing your php source: see cmd below for easy visualization.
E:\FullStackDeveloper\PHP Tips and Tricks (main -> origin)
λ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1756a775b2d9 nginx:latest "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp phptipsandtricks-nginx-1
4ed4b74c8b4b phptipsandtricks-app "docker-php-entrypoi…" 2 hours ago Up 2 hours 9000/tcp phptipsandtricks-app-1
33605e421bed redis:latest "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp redis
63b478befc6b mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, 33060/tcp phptipsandtricks-db-1
E:\FullStackDeveloper\PHP Tips and Tricks (main -> origin)
λ docker exec -it phptipsandtricks-app-1 sh
/var/www/html # ls
Dockerfile QuyTrinhThietKe docker-compose-multiple-site.yml index.php test
DockerfileV2 README.md docker-compose-run-multiple-service nginx.conf vendor
DockerfileV3 composer.json docker-compose.yml origin)
Note-Docker-Compose.txt composer.lock example php-config
Note.txt db_hoanguyencoder.sql github.txt redis
/var/www/html # composer require predis/predis
After installing the library, you can proceed to use Redis in PHP
Create redis.php file
/*
Using Redis on Docker (docker-compose.yml) in PHP
Install :
composer require predis/predis
Docker Compose :
*/
require '../../vendor/autoload.php';
try {
// Kết nối Redis
$redis_host = getenv('REDIS_HOST') ?: 'default_host';
$redis_port = getenv('REDIS_PORT') ?: 6379;
$redis_pass = getenv('REDIS_PASSWORD') ?: null;
$redis = new \Predis\Client([
'scheme' => 'tcp',
'host' => $redis_host, // Lấy biến môi trường từ file .env
'port' => $redis_port, // Nếu cần sử dụng port,
'password' => $redis_pass // Nếu cần sử dụng password
]);
// Ví dụ:
$key = "hoanguyencoder_dev";
$ttl = 10; // thời gian sống của khóa (key) là 10 giây
// Kiểm tra key, nếu không có ta set key cho nó
$check = $redis->exists($key);
// Nếu khóa (key) tồn tại
if ($check) {
// Kiểm tra thời gian sống của khóa (key)
$ttl = $redis->ttl($key);
echo $ttl ."\n";
// Nếu khóa (key) còn thời gian sống
if ($ttl > 0) {
echo "Khóa $key tồn tại \n";
echo $redis->get($key) ."\n";
}
// Nếu khóa (key) đã hết thời gian sống
else {
echo "Khóa $key không có thời gian sống\n";
// Xóa khóa (key)
$redis->del($key);
echo "Đã xóa khóa $key \n";
}
}
// Nếu khóa (key) không tồn tại
else {
echo "Lần đầu! \n";
echo "Khóa $key không tồn tại \n";
echo "Và khóa $key sẽ được tạo \n";
$redis->set($key, "Hoa Nguyen Coder");
echo "Cài đặt thời gian $ttl giây \n";
$redis->expire($key, $ttl);
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
Result of executing Redis.php file
Lần đầu!
Khóa hoanguyencoder_dev không tồn tại
Và khóa hoanguyencoder_dev sẽ được tạo
Cài đặt thời gian 10 giây
7
Khóa hoanguyencoder_dev tồn tại
Hoa Nguyen Coder
The article : How to Connect Redis with PHP Using Docker Compose
Github : https://github.com/skipperhoa/php-tips-and-tricks/blob/main/example/app/redis.php
Github : https://github.com/skipperhoa/php-tips-and-tricks/blob/main/docker-compose.yml
Top comments (0)