50% discount in conference replays
2020 and 2021 events
In English, French, German, Polish and Spanish

Использование Redis для хранения сессий

Использование Redis для хранения сессий

В зависимости от нагрузки на сайт и/или его инфраструктуру нам возможно понадобится использовать Redis вместо PostgreSQL для управления пользовательскими сессиями.

Когда мы переносили хранение сессий из файловой системы в базу данных, мы перечислили все необходимые шаги для добавления нового сервиса.

Следуя тем же инструкциям, ниже приведён код патча, который активирует 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
48
49
50
51
--- a/.platform.app.yaml
+++ b/.platform.app.yaml
@@ -14,6 +14,7 @@ runtime:
         - iconv
         - mbstring
         - pdo_pgsql
+        - redis
         - sodium
         - xsl
         
@@ -39,6 +40,7 @@ mounts:

 relationships:
     database: "database:postgresql"
+    redis: "rediscache:redis"
     
 hooks:
     build: |
--- a/.platform/services.yaml
+++ b/.platform/services.yaml
@@ -15,3 +15,6 @@ varnish:
 files:
     type: network-storage:1.0
     disk: 256
+
+rediscache:
+    type: redis:5.0
--- a/config/packages/framework.yaml
+++ b/config/packages/framework.yaml
@@ -7,7 +7,7 @@ framework:
     # Enables session support. Note that the session will ONLY be started if you read or write from it.
     # Remove or comment this section to explicitly disable session support.
     session:
-        handler_id: '%env(DATABASE_URL)%'
+        handler_id: '%env(REDIS_URL)%'
         cookie_secure: auto
         cookie_samesite: lax
         storage_factory_id: session.storage.factory.native
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -15,6 +15,10 @@ services:
       # - ./docker/db/data:/var/lib/postgresql/data:rw
 ###< doctrine/doctrine-bundle ###

+  redis:
+    image: redis:5-alpine
+    ports: [6379]
+
 volumes:
 ###> doctrine/doctrine-bundle ###
   db-data:

Разве это не прекрасно?

"Перезагрузите" Docker, чтобы запустить сервис Redis:

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

Откройте приложение, чтобы убедиться, что ничего не сломалось.

Как и всегда, зафиксируйте новые изменения в репозитории и опубликуйте новую версию:

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