Skip to content

Redisにセッションを保存する

Webサイトのトラフィックやインフラストラクチャによって、PostgreSQLではなくRedisを使ってセッションを管理したいかもしれません。

プロジェクトのコードを分岐させて、セッションをファイルシステムからデータベースにセッションを移行したとき、新しいサービスを追加するすべての必要なステップを並べました。

こちらが、1つのパッチでプロジェクトにRedisを追加する方法です:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
--- i/.upsun/config.yaml
+++ w/.upsun/config.yaml
@@ -37,6 +37,7 @@ applications:
                 - iconv
                 - mbstring
                 - pdo_pgsql
+                - redis
                 - sodium
                 - xsl

@@ -62,6 +63,7 @@ applications:

         relationships:
             database: "database:postgresql"
+            redis: "rediscache:redis"

         hooks:
             build: |
--- i/.upsun/config.yaml
+++ w/.upsun/config.yaml
@@ -21,3 +21,6 @@ services:
             type: network-storage:2.0

+    rediscache:
+        type: redis:8.0
+
 applications:
--- i/compose.yaml
+++ w/compose.yaml
@@ -14,6 +14,10 @@ services:
       # - ./docker/db/data:/var/lib/postgresql/data:rw
 ###< doctrine/doctrine-bundle ###

+  redis:
+    image: redis:8.0-alpine
+    ports: [6379]
+
 volumes:
 ###> doctrine/doctrine-bundle ###
   database_data:
--- i/config/packages/framework.yaml
+++ w/config/packages/framework.yaml
@@ -4,3 +4,3 @@ framework:
     # Note that the session will be started ONLY if you read or write from it.
     session:
-        handler_id: '%env(resolve:DATABASE_URL)%'
+        handler_id: '%env(REDIS_URL)%'

これは 美しく ないでしょうか?

Redisサービスを追加するために、Dockerを"再起動"します:

1
2
$ docker compose stop
$ docker compose up -d --remove-orphans

ブラウザでWebサイトを表示して、ローカルでテストします。以前と同じくすべての機能が使えます。

通常通りコミットしてデプロイします:

1
$ symfony cloud:push
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.
TOC
    Version