Только для посетителей нашего блога: получите дополнительные 3 месяца бесплатно + скидку 10% на трехгодичный план YSBLOG10
Захватить сделку

Как оптимизировать Redis на сервере Linux для повышения производительности

Для оптимизации Redis на сервере Linux обновите Redis до последней стабильной версии, настройте redis.conf (максимальное количество памяти, политика вытеснения, персистентность), отключите прозрачные большие страницы памяти, установите vm.overcommit_memory=1, увеличьте количество файловых дескрипторов и somaxconn, оптимизируйте сеть и отслеживайте задержку, фрагментацию памяти и вытеснения. Примените ограничения systemd, запустите на быстром хранилище и проведите бенчмарк.

Оптимизация Redis на сервере Linux заключается в согласовании конфигурации Redis, параметров ядра Linux, хранилища и сети с вашей рабочей нагрузкой. В этом руководстве я покажу вам, как именно оптимизировать Redis на сервере Linux. Linux-сервер Разработка сред, от настройки redis.conf до оптимизации ядра, основана на более чем 12-летнем опыте реального хостинга и проектирования производительности.

Предварительные требования и экспресс-проверки

Перед настройкой определите базовый уровень и убедитесь, что окружающая среда находится в здоровом состоянии.

  • Используйте Redis 7.x или более поздней версии для улучшения операций ввода-вывода, экономии памяти и удаления неиспользуемых ресурсов.
  • Достаточное количество припасов RAM Так что ваши набор данных + накладные расходы помещается в память, плюс 20–30% запаса по объему.
  • Используйте современное ядро ​​Linux (5.x+), SSD/NVMe-накопитель при использовании AOF и стабильную версию операционной системы. CPU часы (отключить агрессивный режим энергосбережения).
  • По возможности запускайте Redis на выделенных экземплярах (избегайте «шумных соседей»).
# Baseline checks
redis-cli INFO server | egrep 'redis_version|process_id'
redis-cli INFO memory | egrep 'used_memory_rss|mem_fragmentation_ratio'
redis-cli INFO stats | egrep 'evicted_keys|keyspace_hits|keyspace_misses'

# OS and hardware snapshot
uname -a
lsb_release -a 2>/dev/null || cat /etc/os-release
free -h
lsblk -o NAME,ROTA,SIZE,TYPE,MOUNTPOINT

Правильная установка или обновление Redis

Регулярно обновляйте Redis. В новых версиях реализованы оптимизации, более интеллектуальные алгоритмы вытеснения и многое другое. исправления безопасностиПредпочтительнее использовать официальные репозитории или репозитории проверенных поставщиков.

# Debian/Ubuntu
sudo apt-get update && sudo apt-get install -y redis-server
sudo systemctl enable --now redis

# RHEL/CentOS/Rocky (EPEL or vendor repo)
sudo dnf install -y redis
sudo systemctl enable --now redis

# Verify version
redis-cli --version

Если вы компилируете из исходного кода, зафиксируйте конкретную стабильную версию, запускайте Redis под выделенным пользователем и используйте systemd для контроля.

Настройка производительности в файле coreredis.conf

Наибольший прирост производительности достигается за счет правильной настройки Redis. Настройте параметры в соответствии с вашими потребностями: только кэширование, смешанное чтение/запись или надежное хранилище данных.

Сеть и соединения

  • Привязывайтесь только к необходимым интерфейсам и оставляйте защищенный режим включенным для обеспечения безопасности.
  • Увеличьте количество запросов в очереди и уровень поддержания соединения TCP для обработки всплесков активности и длительных соединений.
  • Используйте Unix-сокеты для локальных приложений, чтобы уменьшить накладные расходы TCP.

Память и выселение

  • Поставьте maxmemory ограничить использование и выбрать подходящую политику выселения: allkeys-lru or allkeys-lfu для обычных тайников; volatile-lru/lfu когда вы явно указываете срок действия ключей.
  • Включите активную дефрагментацию, чтобы уменьшить всплески фрагментации.
  • Монитор mem_fragmentation_ratioЗначения > 1.5 могут указывать на необходимость настройки или нехватку памяти.

Стратегия сохранения (RDB против AOF)

  • Только кэширование: отключение сохранения данных для минимизации задержки и операций ввода-вывода.
  • Долговечность: включение AOF с appendfsync everysec (сбалансированный) и снимки RDB для быстрого перезапуска.
  • Используйте aof-use-rdb-preamble yes а также автоматическое перезаписывание файлов AOF для поддержания их небольшого размера.
# /etc/redis/redis.conf (key excerpts)

# Security & networking
bind 127.0.0.1 ::1
protected-mode yes
port 6379
tcp-backlog 65535
timeout 0
tcp-keepalive 300
# For local apps (optional):
# unixsocket /run/redis/redis.sock
# unixsocketperm 770

# General
supervised systemd
databases 16
io-threads 4
io-threads-do-reads yes

# Memory
maxmemory <SET_THIS_TO_70-80%_OF_RAM_FOR_REDIS>
maxmemory-policy allkeys-lfu
active-defrag yes
active-defrag-cycle-min 10
active-defrag-cycle-max 75

# Expiration & CPU scheduling
hz 10
dynamic-hz yes
active-expire-effort 5

# Persistence (choose per workload)
save ""                             # cache-only: disable RDB
# For durability:
# save 900 1
# save 300 10
# save 60 10000

appendonly no                       # cache-only
# For durability:
# appendonly yes
# appendfsync everysec
# no-appendfsync-on-rewrite yes
# auto-aof-rewrite-percentage 100
# auto-aof-rewrite-min-size 64mb
# aof-use-rdb-preamble yes

# Background writes
rdbcompression yes
rdbchecksum yes
stop-writes-on-bgsave-error no

# Client buffers (avoid OOM on Pub/Sub)
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit pubsub 32mb 8mb 60

# Latency diagnostics (toggle during tests)
# latency-monitor-threshold 100

После внесения изменений перезапустите Redis и проверьте результат. redis-cli CONFIG GET * для подтверждения настроек.

Настройка ядра и системы Linux

Отключить прозрачные большие страницы (THP)

THP увеличивает задержку и фрагментацию в Redis. Отключите его навсегда.

# Disable THP now
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag

# Persist across reboots (grub)
sudo sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="transparent_hugepage=never /' /etc/default/grub
sudo update-grub && sudo reboot

Избыточные выделения памяти, подкачка и память

  • Поставьте vm.overcommit_memory=1 для предотвращения сбоев при создании форков во время перезаписи RDB/AOF.
  • Сведите к минимуму количество обменов: vm.swappiness=1 и избегать чрезмерного выделения памяти без запаса по объему.
# /etc/sysctl.d/99-redis.conf
vm.overcommit_memory = 1
vm.swappiness = 1
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15

# Apply
sudo sysctl --system

Дескрипторы файлов и очередь обработки

  • Повышение nofile Ограничения на обработку большого количества соединений.
  • Совпадение tcp-backlog в файле redis.conf с net.core.somaxconn.
# systemd override for Redis service
sudo systemctl edit redis
# Then add:
# [Service]
# LimitNOFILE=100000
# TasksMax=infinity

sudo systemctl daemon-reload
sudo systemctl restart redis
ulimit -n

НУМА и CPU Сродство

На многорозеточном устройстве в некоторых системах Redis может испытывать проблемы. из-за дисбаланса NUMA. Чередование памяти и выводов. CPUs.

# Interleave memory across NUMA nodes (if numactl is available)
sudo numactl --interleave=all --cpunodebind=0-1 redis-server /etc/redis/redis.conf

# Or set in systemd ExecStart= with numactl wrapper

Вопросы хранения данных и файловых систем.

  • Для задач автоматического создания снимков или ресурсоемких операций используйте SSD/NVMe; для кэширования с низкой задержкой избегайте сетевых хранилищ.
  • Используйте ext4 или XFS с noatime Параметр монтирования для уменьшения усиления при записи.
  • Если обеспечение постоянного хранения данных имеет решающее значение, изолируйте Redis на отдельном диске и включите периодическую команду TRIM для файловой системы на SSD-накопителях.
# Example fstab mount option for Redis data volume
UUID=xxxx /var/lib/redis ext4 defaults,noatime 0 2

Важные оптимизации на стороне клиента

  • Используйте конвейерную обработку для пакетных процессов; это значительно сокращает количество обращений к конвейеру.
  • Отдавайте предпочтение командам, безопасным для двоичного кода, и избегайте больших значений в несколько МБ, которые увеличивают задержку.
  • Удаляйте ключи, которые вам больше не нужны; обновление памяти обходится дешевле, чем устаревшие данные.
  • Выбирайте структуры данных с умом: по возможности используйте хеши/множества вместо больших JSON-объектов.

Мониторинг, сравнительный анализ и техническое обслуживание

  • Run redis-cli INFO и отслеживать: latency, connected_clients, used_memory, evicted_keys, instantaneous_ops_per_sec, mem_fragmentation_ratio.
  • Включите и просмотрите журнал медленных событий: slowlog-log-slower-than 10000 (в микросекундах). Проверить с помощью slowlog get 20.
  • Используйте redis_exporter + Prometheus + Grafana для сбора долгосрочных метрик и оповещений.
  • Изменения в бенчмарке с redis-benchmark или нагрузочные тесты на уровне приложения. Изменяйте по одной переменной за раз.
# Quick latency and slowlog checks
redis-cli latency doctor
redis-cli slowlog get 10 | head -n 50

Высокая доступность и масштабируемость

  • Используйте Redis Sentinel для автоматического переключения при сбое в конфигурациях "главный-реплика".
  • Внедрите кластер Redis или сегментирование на уровне приложений, когда память отдельного узла ограничена.CPU становится узким местом.
  • Рассмотрите возможность использования реплик для чтения, например, для аналитики или фоновых задач, чтобы разгрузить основной сервер от лишнего трафика.

Настройки безопасности, которые также влияют на производительность

  • Привязка к локальному хосту или частным подсетямИзбегайте публичного освещения. Добавьте брандмауэр.
  • Аутентификация (requirepass (или передние крестообразные связки) имеют важное значение; незначительные накладные расходы оправдывают снижение риска.
  • TLS добавляет CPU накладные расходыВключать только в том случае, если трафик покидает доверенную сеть. Для приложений, работающих в одной сети, предпочтительнее использовать локальный Unix-сокет.

Типичные узкие места и контрольный список быстрых решений

  • Резкие скачки задержки: отключить THP, уменьшить AOF fsync до everysecвключить конвейерную обработку.
  • Выселения или нехватка средств: набор maxmemory правильно, выбрать allkeys-lfuОтсечь большие значения.
  • Сбои в работе вилки: набор vm.overcommit_memory=1обеспечить бесплатно RAM запас по высоте (20–30%).
  • Обрывы соединения: повышение somaxconn, tcp-backlog и nofile пределы.
  • Высокая фрагментация: включить active-defragПри необходимости перезапускайте устройство во время плановых технических работ.

Когда следует выбирать управляемую оптимизацию

Если вы обрабатываете критически важные рабочие нагрузки и не можете позволить себе метод проб и ошибок, то manageОкружающая среда помогает. YouStableнаш оптимизированный по производительности VPS и облачные серверы Поставляем с разумными настройками Redis по умолчанию, усилением безопасности ядра и проактивным мониторингом. Мы поможем вам подобрать оптимальный размер. RAMВыберите модель хранения данных и проведите сравнительный анализ производительности вашей системы, чтобы сосредоточиться на внедрении новых функций.

Пошаговое руководство: Примените основные принципы.

  • Обновите Redis до последней стабильной версии.
  • Поставьте maxmemory и соответствующий maxmemory-policy.
  • Выберите режим сохранения данных: нет (кэш) или AOF каждую секунду + RDB (надежное хранение).
  • Отключить THP; установить vm.overcommit_memory=1, somaxconn=65535, поднять nofile.
  • Используйте Unix-сокеты для локальных приложений и включите конвейерную обработку.
  • Мониторинг с помощью redis_exporter; оповещения о задержках, вытеснениях и фрагментации.

Часто задаваемые вопросы (FAQ) – Оптимизация Redis в Linux

Какова оптимальная политика maxmemory для кэша Redis?

Для кэшей общего назначения, allkeys-lfu Обеспечивает превосходные показатели попаданий за счет удаления наименее часто используемых элементов. Если ваши шаблоны доступа носят импульсивный, но кратковременный характер, allkeys-lru Может показать хорошие результаты. Для наборов данных с явно заданными значениями TTL следует рассмотреть... volatile-lfu or volatile-lru Таким образом, выселяются только те ключи, срок действия которых истекает.

Что лучше использовать на сервере Linux: RDB или AOF?

Для чистого кэширования отключите оба параметра для минимизации задержки. Для обеспечения постоянного хранения данных используйте AOF с appendfsync everysec плюс периодические снимки RDB. Этот гибридный модуль обеспечивает быструю перезагрузку и надежность, близкую к реальному времени. manageДопустимые накладные расходы на ввод-вывод.

Как навсегда отключить отображение прозрачных больших страниц?

Отключите это во время выполнения с помощью echo never > /sys/kernel/mm/transparent_hugepage/enabled и сохранять изменения через GRUB путем добавления transparent_hugepage=never в GRUB_CMDLINE_LINUXЗатем обновите GRUB и перезагрузите систему. После перезагрузки проверьте тот же файл sysfs на наличие значения «never».

Сколько соединений может обработать Redis и как это сделать?

Redis может обрабатывать десятки тысяч соединений, но его возможности ограничены файловыми дескрипторами. CPU. Повышение лимитов через systemd (LimitNOFILE=100000), увеличивать net.core.somaxconn, выровнять tcp-backlogи обеспечить достаточное количество CPUИспользуйте пулы соединений в клиентских приложениях для снижения накладных расходов.

Какие метрики Redis указывают на исправность сервера?

Отслеживайте задержку, количество мгновенных операций в секунду, используемую память, коэффициент фрагментации памяти (~1.1–1.5), количество вытесненных ключей (в идеале низкое), заблокированные клиенты и время создания дочерних процессов. Сопоставляйте пики с перезаписями AOF или сохранениями RDB для настройки параметров сохранения и памяти.

Применяя эти методы, вы сможете стабильно добиваться меньшей задержки, предсказуемого использования памяти и стабильной пропускной способности Redis в Linux. Тестируйте изменения на тестовой среде, проводите сравнительный анализ производительности, а затем постепенно внедряйте их — ваши пользователи почувствуют разницу.

Заключение

Оптимизация Redis на Linux-сервер Это означает согласование ядра, конфигурации Redis и поведения клиента с вашей рабочей нагрузкой. Начните с исправления основных параметров ядра, таких как overcommit и THP, затем настройте оптимальный размер maxmemory, политику вытеснения и персистентность.

Далее, улучшите доступ клиентов с помощью конвейерной обработки и локализации, а также избегайте ресурсоемких команд, работающих с большими ключами. Наконец, постоянно отслеживайте задержку, использование памяти и коэффициенты попаданий, чтобы заблаговременно настраивать и масштабировать систему до того, как производительность начнет снижаться.

Отправить по:

Прахлад Праджапати

Пралад — специалист по веб-хостингу и эксперт по органическому росту сайтов с упором на SEO из Индии. Активно работая в цифровом пространстве с 2019 года, он помогает людям развивать свои веб-сайты с помощью эффективных и устойчивых стратегий. Увлеченный обучением и быстрой адаптацией, он считает, что мелкие детали приводят к большому успеху. Узнайте его мнение о веб-хостинге и SEO, чтобы улучшить свое присутствие в интернете.

Оставьте комментарий

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *

Наверх