Skip to content

Использование 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
--- 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)%'

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

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

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

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

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

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