Redis
Redis 是高效能的記憶體鍵值儲存系統,常用於快取、Session 管理、訊息佇列等場景。Piora 讓你能快速部署 Redis 實例並與應用整合。
建立 Redis
Section titled “建立 Redis”- 在控制面板進入「資料庫」頁面
- 選擇「Redis」
- 選擇版本(建議使用 Redis 7)
- 設定參數:
| 參數 | 說明 | 範例 |
|---|---|---|
| 服務名稱 | 容器識別名稱 | my-redis |
| 密碼 | 存取密碼(選填) | (自動產生) |
| 最大記憶體 | 記憶體上限 | 256mb |
# 有密碼的連線字串redis://:password@redis-container:6379
# 無密碼的連線字串redis://redis-container:6379
# 指定資料庫編號(預設為 0)redis://:password@redis-container:6379/0應用連線範例
Section titled “應用連線範例”// Node.js (ioredis)const Redis = require('ioredis');const redis = new Redis(process.env.REDIS_URL);
// 基本操作await redis.set('key', 'value');const value = await redis.get('key');# Python (redis-py)import redisr = redis.from_url(os.environ['REDIS_URL'])
r.set('key', 'value')value = r.get('key')常見使用場景
Section titled “常見使用場景”Session 儲存
Section titled “Session 儲存”// Express.js + connect-redisconst session = require('express-session');const RedisStore = require('connect-redis').default;
app.use(session({ store: new RedisStore({ client: redisClient }), secret: 'your-secret', resave: false, saveUninitialized: false,}));// 快取 API 回應async function getCachedData(key, fetchFn, ttl = 300) { const cached = await redis.get(key); if (cached) return JSON.parse(cached);
const data = await fetchFn(); await redis.setex(key, ttl, JSON.stringify(data)); return data;}// 簡易速率限制器async function rateLimit(ip, limit = 100, window = 60) { const key = `rate:${ip}`; const count = await redis.incr(key); if (count === 1) await redis.expire(key, window); return count <= limit;}當 Redis 達到記憶體上限時,需要設定淘汰策略:
| 策略 | 說明 |
|---|---|
noeviction | 不淘汰,記憶體滿時拒絕寫入 |
allkeys-lru | 淘汰最久未使用的 key(推薦) |
volatile-lru | 只淘汰有設定過期時間的 key |
allkeys-random | 隨機淘汰 |
Redis 支援兩種持久化方式:
- RDB — 定期產生快照,適合備份
- AOF — 記錄每個寫入操作,資料安全性更高
在 Piora 中,Redis 預設啟用 RDB 持久化,資料儲存在 Docker Volume 中。
在控制面板中可以查看:
- 記憶體使用量與上限
- 連線數
- 每秒操作數(QPS)
- Key 數量統計