首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Linux 編譯安裝 Redis 與 PHPRedis 擴展完整教學

     編輯:PHP 綜合知識

環境準備

  • OS:CentOS 7 / Ubuntu 20.04+
  • PHP:7.4+ (路徑 /usr/local/php)
  • 工具:gcc、make、wget

一、Redis 服務端編譯安裝

1. 下載穩定版

cd /usr/local/src
wget https://download.redis.io/releases/redis-7.2.4.tar.gz
tar xzf redis-7.2.4.tar.gz
cd redis-7.2.4

2. 編譯 (解決 32 位原子操作錯誤)

# 64 位系統直接 make
make

# 若報錯:undefined reference to `__sync_add_and_fetch_4'
# 原因:GCC 預設架構不支援 32 位原子內建函數
# 解決:指定架構
make CFLAGS="-march=x86-64"   # 或 -march=native

# 測試 (可選)
# make test

3. 安裝

make install PREFIX=/usr/local/redis
# 實際複製:
# cp src/redis-server src/redis-cli src/redis-benchmark src/redis-check-* /usr/local/redis/bin/

4. 配置文件 (redis.conf)

mkdir -p /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc/

# 關鍵修改
vim /usr/local/redis/etc/redis.conf
# bind 0.0.0.0              # 允許外部連線 (生產請限制 IP)
# protected-mode no         # 關閉保護模式 (若無密碼且 bind 0.0.0.0 必須關閉)
# daemonize yes             # 後台運行
# pidfile /var/run/redis.pid
# logfile /var/log/redis.log
# dir /usr/local/redis/data  # 資料目錄
# maxmemory 256mb           # 限制記憶體
# maxmemory-policy allkeys-lru
# requirepass YourStrongPass # 生產必須設定密碼

5. 系統優化 (解決啟動警告)

# 1. 關閉透明大頁面
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local

# 2. 允許記憶體過量使用
sysctl vm.overcommit_memory=1
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl -p

# 3. 增加 somaxconn
sysctl net.core.somaxconn=1024
echo 'net.core.somaxconn = 1024' >> /etc/sysctl.conf

6. 建立 systemd 服務

cat > /etc/systemd/system/redis.service <<'EOF'
[Unit]
Description=Redis In-Memory Store
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -p 6379 shutdown
PIDFile=/var/run/redis.pid
Restart=always
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now redis
systemctl status redis

7. 驗證

/usr/local/redis/bin/redis-cli ping
# PONG

netstat -tnlp | grep 6379

二、PHPRedis 擴展安裝

1. 下載對應 PHP 版本源碼

cd /usr/local/src
# PHP 7.4+ 使用 5.x 分支
wget https://github.com/phpredis/phpredis/archive/5.3.7.tar.gz -O phpredis-5.3.7.tar.gz
tar xzf phpredis-5.3.7.tar.gz
cd phpredis-5.3.7

2. 編譯安裝

/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-redis
make && make install

3. 啟用擴展

echo "extension=redis.so" >> /usr/local/php/etc/php.ini
# 或建立獨立 ini
echo "extension=redis.so" > /usr/local/php/etc/php.d/redis.ini

4. 重啟 PHP-FPM

systemctl restart php-fpm
# 或
service php-fpm restart

5. 驗證

/usr/local/php/bin/php -m | grep redis
# redis

/usr/local/php/bin/php -r '$r=new Redis(); $r->connect("127.0.0.1",6379); var_dump($r->ping());'
# bool(true)

常見問題排查

現象原因與解決
make 報錯 atomic加 CFLAGS="-march=native" 或升級 GCC
phpize 找不到安裝 php-devel (CentOS) / php7.4-dev (Ubuntu)
Redis 啟動即退出檢查 /var/log/redis.log,常見:端口衝突、權限、配置語法錯誤
PHP 無法載入 redis.so確認 extension_dir、php.ini 生效、PHP 版本匹配 (TS/NTS)

生產環境建議

  • 使用 Redis Sentinel 或 Redis Cluster 實現高可用。
  • 配置 maxmemory 與淘汰策略,防止 OOM。
  • 啟用 slowlog 監控慢指令。
  • 定期 BGREWRITEAOF、備份 RDB。
  • PHP 端使用連線池 (如 predis/predis 或 phpredis 持久連線 pconnect)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved