Redis 設定來源
目的
整理新舊專案 Redis 設定來源、連線入口與常見用途。
Redis 不是 relational DB,也不應塞在 資料庫.md 裡。它常用於 cache、rate limit、短期鎖、session handler 與去重。排查時要先確認是哪一種 Redis 用法。
文件狀態:草稿 / 已對新舊專案主要設定來源
最後驗證:2026-05-07
來源:pro360_api_82 / get-lancer-php56 code grep
安全規則
不要在文件中貼:
- production Redis host
- Redis password
- 內網 host 完整資訊
- 可以直接連線的 endpoint
可以記:
- 設定檔路徑
- key 名稱
- 連線入口 class
- cache key pattern
- 用途與排查順序
pro360_api_82
主要來源:
Lib/Common/Configuration.php
docker/staging/Configuration.php
Lib/Util/RedisUtil.php
docker/staging/Dockerfile設定 key / constant:
use_redis
ProConfig::get('redis')['hostname']
ProConfig::get('redis')['port']連線入口:
PRO360\Util\RedisUtil::getConnect()
PRO360\Util\RedisUtil::getCheckConnect()RedisUtil::getConnect() 會先看:
defined('use_redis') ? use_redis : 0如果 use_redis 沒開,會直接回 false。因此 new API 排查 Redis 行為時,先確認目前環境實際載入的 Configuration.php 是否有開 use_redis。
Docker staging 有安裝 PHP Redis extension:
php8.2-redisnew API 常見用途
| 用途 | 例子 |
|---|---|
| API key cache | new_api_keys, api_key_platform, api_key_client_cache |
| request / API rate limit | access_act_<user_id>, ddos_<session_id> |
| double click / retry guard | copy_request__<id>, Read_Quote_<id> |
| quote bid / payment lock | payoff lock、user_credit_card_just_use_<user_id> |
| catalog / SEO / translation cache | category、form field、multi translation、Kentico content |
| notification token cache | push / email / third-party token |
new API 排查重點
- 先確認實際環境載入哪份
Configuration.php。 - 確認
use_redis是否啟用。 - 確認 PHP Redis extension 是否存在。
- 若是付款 / contact lock,先看 Redis lock 是否造成重試或 guard。
- 若 Redis 斷線,
getCheckConnect()會打LogHelper('getCheckConnect')->error(...)。
付款 / contact lock 的完整判讀不要寫在 Redis 設定文件裡;請看 quote_bid_contact_charge 與 transactions。
get-lancer-php56
legacy CakePHP 有多個 Redis 入口,不能只看一個設定。
主要來源:
app/Config/settings.yml
app/Config/core.php
app/Lib/RedisUtil.php
app/Lib/RedisHelper.php
app/Lib/CacheUtil.php
app/Plugin/HighPerformance/Config/bootstrap.php
app/Plugin/HighPerformance/Model/Datasource/Session/RedisSession.phpRedisUtil
app/Lib/RedisUtil.php 會讀:
Configure::read('RedisSession.hostname')
Configure::read('RedisSession.port')這些 key 主要來自:
app/Config/settings.yml常見 key:
RedisSession.is_redis_session_enabled
RedisSession.hostname
RedisSession.port注意:RedisSession.is_redis_session_enabled 主要控制 CakePHP session handler 是否改用 Redis,不等於所有 RedisUtil cache 都停用。RedisUtil 直接讀 hostname / port 連線。
Cake Cache::config
app/Config/core.php 另有 Cake Cache Redis 設定:
Cache::config('redis_mins', ...)
Cache::config('redis_hour', ...)
Cache::config('redis_days', ...)這些設定使用 core.php 裡的 $redis_host 與固定 port / duration / prefix。
常見 cache config:
| Cache config | 用途 |
|---|---|
redis_mins | 短 TTL cache |
redis_hour | 約一小時 cache |
redis_days | 多日 cache |
RedisSession
app/Plugin/HighPerformance/Config/bootstrap.php 會看:
Configure::read('RedisSession.is_redis_session_enabled')若啟用,會設定:
Session.handler.engine = HighPerformance.RedisSession這是 session 儲存方式,不是一般 cache / lock 的唯一入口。
legacy 常見用途
| 用途 | 例子 |
|---|---|
| Cake Cache | blog posts、view / element cache |
| query cache | getQueryRedisCache() / setQueryRedisCache() |
| API session cache invalidation | api_session_<id> |
| payment / payoff lock | acquirePayoffLock() / releasePayoffLock() |
| quote / category / service cache | pro list、pricing data、CMS category |
| Redis session handler | HighPerformance plugin |
新舊差異
| 項目 | new API pro360_api_82 | legacy get-lancer-php56 |
|---|---|---|
| 主要 Redis utility | Lib/Util/RedisUtil.php | app/Lib/RedisUtil.php |
| host / port 來源 | ProConfig::get('redis') | Configure::read('RedisSession.*') 或 core.php 的 Cake Cache config |
| 啟用開關 | use_redis | RedisSession.is_redis_session_enabled 只控制 session handler |
| PHP extension | php8.2-redis | PHP Redis extension / legacy environment |
| cache key helper | key / hash JSON helpers | key / hash JSON helpers、query cache |
| session handler | new API session 不靠 Cake RedisSession | HighPerformance RedisSession 可選 |
常見誤判
- 不要把 Redis 當 MySQL 查;Redis 是短期 cache / lock / session / rate limit。
- legacy 的
RedisSession.is_redis_session_enabled = 0不代表所有 RedisUtil 都不會用。 - legacy
Cache::config('redis_hour')和RedisUtil可能讀不同設定來源。 - new API
use_redis = 0時,很多 Redis cache helper 會回false,流程可能 fallback 到 DB 或略過 cache。 - Redis key 通常有 TTL;排查時沒有 key 不一定代表流程沒跑過。
排查順序
- 先確認是 cache、lock、session、rate limit 還是 queue-like usage。
- 查對應專案的 Redis utility / Cake Cache config。
- 確認實際環境設定來源,不要只看本機檔案。
- 若涉及付款 / contact,先看 application log,再判斷 Redis lock 是否影響流程。
- 若要查 Redis key,先確認 key pattern 與 TTL,不要把 key 不存在直接當成流程失敗。