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-redis

new API 常見用途

用途例子
API key cachenew_api_keys, api_key_platform, api_key_client_cache
request / API rate limitaccess_act_<user_id>, ddos_<session_id>
double click / retry guardcopy_request__<id>, Read_Quote_<id>
quote bid / payment lockpayoff lock、user_credit_card_just_use_<user_id>
catalog / SEO / translation cachecategory、form field、multi translation、Kentico content
notification token cachepush / email / third-party token

new API 排查重點

  1. 先確認實際環境載入哪份 Configuration.php
  2. 確認 use_redis 是否啟用。
  3. 確認 PHP Redis extension 是否存在。
  4. 若是付款 / contact lock,先看 Redis lock 是否造成重試或 guard。
  5. 若 Redis 斷線,getCheckConnect() 會打 LogHelper('getCheckConnect')->error(...)

付款 / contact lock 的完整判讀不要寫在 Redis 設定文件裡;請看 quote_bid_contact_chargetransactions

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.php

RedisUtil

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 Cacheblog posts、view / element cache
query cachegetQueryRedisCache() / setQueryRedisCache()
API session cache invalidationapi_session_<id>
payment / payoff lockacquirePayoffLock() / releasePayoffLock()
quote / category / service cachepro list、pricing data、CMS category
Redis session handlerHighPerformance plugin

新舊差異

項目new API pro360_api_82legacy get-lancer-php56
主要 Redis utilityLib/Util/RedisUtil.phpapp/Lib/RedisUtil.php
host / port 來源ProConfig::get('redis')Configure::read('RedisSession.*')core.php 的 Cake Cache config
啟用開關use_redisRedisSession.is_redis_session_enabled 只控制 session handler
PHP extensionphp8.2-redisPHP Redis extension / legacy environment
cache key helperkey / hash JSON helperskey / hash JSON helpers、query cache
session handlernew API session 不靠 Cake RedisSessionHighPerformance 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 不一定代表流程沒跑過。

排查順序

  1. 先確認是 cache、lock、session、rate limit 還是 queue-like usage。
  2. 查對應專案的 Redis utility / Cake Cache config。
  3. 確認實際環境設定來源,不要只看本機檔案。
  4. 若涉及付款 / contact,先看 application log,再判斷 Redis lock 是否影響流程。
  5. 若要查 Redis key,先確認 key pattern 與 TTL,不要把 key 不存在直接當成流程失敗。