1. 異步發送郵件工具原理;
現有郵件發送系統的實現:
- 用戶點擊註冊
- 連接郵箱服務器
- 將註冊信息發送給郵箱服務器
- 郵箱服務器返回結果到本地 WEB 服務器
不可控因素
- 網絡問題:如果網絡比較慢,連接郵箱服務器的時候,響應比較慢,用戶體驗差
解決方案
- 用戶註冊後,將註冊信息儲存在本地服務器內存隊列,通知用戶發送成功
- 服務端離線跑一個程序,監聽內存隊列,將隊列中的郵件數據依次發送
- 用戶感知不到,體驗好
相關工具和內容
- 安裝 Redis 服務
- 編寫插件類(Yii2 框架)
- 重寫 SwiftMailer 類的方法:本來是直接發送,現在要往隊列裏存
- 提交至 Github,提交 Composer,使用 Composer 下載插件
2. 安裝 Redis 服務;
- 下載安裝包
cd /usr/local/src
# 訪問 Redis 官網來到 Download 頁面:https://redis.io/download
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
- 解壓
tar zxvf redis-5.0.5.tar.gz
- 安裝
# 進入軟件目錄
cd redis-5.0.5
# 之前安裝軟件的方法:yum、rpm 或者通過二進制包進行編譯
# 但是 redis-5.0.5 沒有 config 命令,不能配置
# 但是有 Makefile,也就是說,配置都已經做好了,所以只需要調用 Makefile 就行
make PREFIX=/usr/local/redis
- 配置
# 把 redis.conf 複製到安裝路徑下
mkdir -p /usr/local/etc
cp redis.conf /usr/local/redis/src
- 製作啓動腳本
vim utils/redis_init_script
# 修改如下代碼
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
# 修改爲
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf" # 軟鏈到 /usr/local/redis/etc/redis.conf
# 退出保存
# 做 redis.conf 的軟鏈
ln -s /user/local/redis/etc/redis.conf /etc/redis/6379.conf
# 修改 redis 爲後臺運行
vim /etc/redis/6379.conf
/daemonize
# 將下面
daemonize no
# 改成
daemonize yes
# 啓動腳本複製到啓動目錄 /etc/init.d/
cp redis_init_script /etc/init.d/redis
# 啓動 redis
/etc/init.d/redis start
# 查看端口
netstat -tunpl | grep 6379
# 設置 Redis 開啓啓動
vim /etc/init.d/redis
# 在第二行加上
#chkconfig:2345 80 90
# 保存退出
chkconfig --add redis
chkconfig redis on
# 重啓 Redis
service redis stop
service redis start
# 登錄 Redis
/usr/local/redis/bin/redis-cli
3. 安裝 PHP 的 Redis 擴展;
- 如果要通過程序向 Redis 裏存儲數據,比如通過 PHP 去連接 Redis,那就要讓 PHP 作爲 Redis 的客戶端,那就要給 PHP 去安裝一個擴展
- 進入 Redis 官網,有一個客戶端的概念:https://redis.io/clients#php
- 選擇 phpredis:https://github.com/phpredis/phpredis
cd /usr/local/src
git clone https://github.com/phpredis/phpredis.git
- 安裝
cd phpredis/
# 通過 phpize 建立 PHP 的外掛模塊,生成 configure
phpize
# 配置指定安裝目錄
./configure --with-php-config=/usr/local/php/bin/php-config
# 配置安裝 && 編譯安裝
make && make install
# 配置 php.ini
echo "[redis]" >> /usr/local/php/etc/php.ini
echo "extension = redis.so" >> /usr/local/php/etc/php.ini
# 重啓 nginx 和 php
systemctl restart nginx
/etc/init.d/php-fpm restart
4. 安裝 Yii2 的 Redis 插件;
- github 搜索:https://github.com/search?q=yii2+redis
- 待完成