Назад | Перейти на главную страницу

Файлы сессий PHP 1.5m. Размер на диске больше фактического содержимого. Стоит мне перейти на Redis?

Я заметил, что моя папка сеансов PHP заполнена миллионами файлов с одинаковыми данными сеанса. Например, предположим, что это строка длиной 48 байт, содержимое остается прежним.

Предположим, что в / var / tmp / php / sessions примерно 1,5 миллиона таких файлов сеансов.

Если я сделаю математику правильно, 48 байтов * 1500000 файлов / 1024/1024 = 68 МБ примерно.

Но если я сделаю следующее, я получу результат 6G

cd
/var/tmp/php/sessions
du -ch

1) Почему показывает 6G (примерно)? (Возможный ответ в моем втором вопросе ниже)

Дополнительные проверки: Сортировка файлов в порядке убывания размера файла для проверки максимального размера файла. Размер отдельного файла 4k

du -a | sort -n -r | head -n 10
6464600 .
4       ./sess_fffffABCDcdf9c312340f094d165678

Я заменил некоторые символы в названии файла выше.

2) Почему показывает 4к? Это связано с размером блока файловой системы. Теперь использование 6G имеет смысл. Ссылка : https://stackoverflow.com/questions/26666642/why-the-size-of-an-empty-directory-in-linux-is-4kb

3) Если я использую Redis в качестве дескриптора сеанса для PHP, он определенно будет быстрее, чем диск, но теоретически будет ли он использовать только около 68 МБ данных в ОЗУ, плюс, возможно, некоторые накладные расходы?

4) Пытается ли Redis уменьшить фактическое использование памяти, если значения, хранящиеся в нем, одинаковы, то есть одно и то же значение повторяется 1,5 миллиона раз для разных ключей сеанса?

У меня нет контроля над сеансом и его данными, и я не могу предотвратить создание сеансов или удалить их содержимое, даже если оно повторяется.

Я ищу подтверждения по первым двум вопросам и немного дополнительных пояснений со ссылками на вопросы 3 и 4, если возможно.

  1. Он показывает шесть гигабайт, поскольку минимальный размер блока распределения в вашей файловой системе составляет четыре килобайта.
  2. Да, это связано с размером блока FS.
  3. Redis будет быстрее диска, но не намного быстрее, потому что данные, скорее всего, находятся в кеше файловой системы ОС. Он будет использовать меньше памяти, чем хранилище сеанса на диске. Однако точный масштаб определить сложно, нужно будет прочитать код, чтобы оценить его, или настроить тестовую систему и измерить использование памяти.
  4. Короткий поиск в Google для «дедупликации Redis» показал несколько страниц, которые указывают на то, что Redis может выполнить описанную вами задачу, чтобы уменьшить объем памяти. Я не знаю фактического статуса реализации этих функций.