How Can We Help?
安裝 Redis Server 為 Magento 1.9 提供 Session 快取加速
Magento 預設的 Session 是存放在實體硬碟上,位置位於 var/session
而 Redis Server 是一種 NoSQL 記憶體式的資料庫(key-value)
即便使用 SSD,在速度上還是比不上存放在記憶體中
安裝方式
於 CentOS 7 之下可直接利用 yum 來安裝
yum install -y redis #設定開機啟動 systemctl enable redis #立即啟動 systemctl start redis #查看redis監聽的port(預設是6379) systemctl status redis ss -nlp | grep redis #開放 6379 port firewall-cmd --permanent --zone=public --add-port=6379/tcp firewall-cmd --reload #查看防火牆開放的 port 是否有 6379 firewall-cmd --list-all --zone=public
調整 Magento 設定
將 /app/etc/local.xml 第 29 行的
<session_save><![CDATA[files]]></session_save>
替換為
<!-- This is a child node of config/global --> <cache> <backend>Cm_Cache_Backend_Redis</backend> <backend_options> <server>127.0.0.1</server> <!-- or absolute path to unix socket --> <port>6379</port> <persistent></persistent> <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: //github.com/nicolasff/phpredis/issues/70 --> <database>0</database> <!-- Redis database number; protection against accidental data loss is improved by not sharing databases --> <password></password> <!-- Specify if your server requires authentication --> <force_standalone>0</force_standalone> <!-- 0 for phpredis, 1 for standalone PHP --> <connect_retries>1</connect_retries> <!-- Reduces errors due to random connection failures; a value of 1 will not retry after the first failure --> <read_timeout>10</read_timeout> <!-- Set read timeout duration; phpredis does not currently support setting read timeouts --> <automatic_cleaning_factor>0</automatic_cleaning_factor> <!-- Disabled by default --> <compress_data>1</compress_data> <!-- 0-9 for compression level, recommended: 0 or 1 --> <compress_tags>1</compress_tags> <!-- 0-9 for compression level, recommended: 0 or 1 --> <compress_threshold>20480</compress_threshold> <!-- Strings below this size will not be compressed --> <compression_lib>gzip</compression_lib> <!-- Supports gzip, lzf, lz4 (as l4z) and snappy --> <use_lua>0</use_lua> <!-- Set to 1 if Lua scripts should be used for some operations --> </backend_options> </cache> <!--session_save><![CDATA[files]]></session_save--> <session_save>db</session_save> <redis_session> <!-- All options seen here are the defaults --> <host>127.0.0.1</host> <!-- Specify an absolute path if using a unix socket --> <port>6379</port> <password></password> <!-- Specify if your server requires authentication --> <timeout>2.5</timeout> <!-- This is the connection timeout, not the locking timeout --> <persistent></persistent> <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: //github.com/nicolasff/phpredis/issues/70 --> <db>0</db> <!-- Redis database number; protection from accidental loss is improved by using a unique DB number for sessions --> <compression_threshold>2048</compression_threshold> <!-- Set to 0 to disable compression (recommended when suhosin.session.encrypt=on); known bug with strings over 64k: //github.com/colinmollenhour/Cm_Cache_Backend_Redis/issues/18 --> <compression_lib>gzip</compression_lib> <!-- gzip, lzf, lz4 or snappy --> <log_level>1</log_level> <!-- 0 (emergency: system is unusable), 4 (warning; additional information, recommended), 5 (notice: normal but significant condition), 6 (info: informational messages), 7 (debug: the most information for development/testing) --> <max_concurrency>6</max_concurrency> <!-- maximum number of processes that can wait for a lock on one session; for large production clusters, set this to at least 10% of the number of PHP processes --> <break_after_frontend>5</break_after_frontend> <!-- seconds to wait for a session lock in the frontend; not as critical as admin --> <fail_after>10</fail_after> <!-- seconds after which we bail from attempting to obtain lock (in addition to break after time) --> <break_after_adminhtml>30</break_after_adminhtml> <first_lifetime>600</first_lifetime> <!-- Lifetime of session for non-bots on the first write. 0 to disable --> <bot_first_lifetime>60</bot_first_lifetime> <!-- Lifetime of session for bots on the first write. 0 to disable --> <bot_lifetime>7200</bot_lifetime> <!-- Lifetime of session for bots on subsequent writes. 0 to disable --> <disable_locking>0</disable_locking> <!-- Disable session locking entirely. --> <min_lifetime>60</min_lifetime> <!-- Set the minimum session lifetime --> <max_lifetime>2592000</max_lifetime> <!-- Set the maximum session lifetime --> </redis_session>
再修改 app/etc/modules/Cm_RedisSession.xml 中
<active>false</active>
為
<active>true</active>
清除快取
php ./resetopc.php rm -rf ./var/session/* && ./var/cache/*
之後檢查 session 資料夾應該不會再產生新的檔案
參考資料
CentOS 7 安裝 Redis、php-pecl-redis(phpredis)
Configure Magento 1.9.x with Redis as Backend Cache