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

Вид: 29611|Ответ: 2

[Редис] Redis использует скрипты Lua для подробных объяснений

[Скопировать ссылку]
Опубликовано 30.04.2021 15:42:57 | | | |
Что касается Redis, его часто используют все, и наиболее часто используется кэш данных.

обзор

Разница в устойчивости Redis между RDB и AOF
https://www.itsvse.com/thread-9555-1-1.html

Установка Docker запускает кэш Redis
https://www.itsvse.com/thread-8995-1-1.html

Примеры объясняют, что такое проникновение кэша Redis, лавина кэша и разрушение кэша
https://www.itsvse.com/thread-8968-1-1.html

redis wildcards для массового удаления ключей
https://www.itsvse.com/thread-7957-1-1.html

Учебник по установке CentOS 7 Redis 5.0.3
https://www.itsvse.com/thread-7201-1-1.html

Установите расширение redis под php 5.5.7 под CentOS
https://www.itsvse.com/thread-7200-1-1.html

Сколько ключей можно хранить в экземпляре redis и каковы максимальные ключи и значения?
https://www.itsvse.com/thread-6848-1-1.html

Проблема redis Chinese не отображается корректно
https://www.itsvse.com/thread-5032-1-1.html

Redis обеспечивает удалённый доступ
https://www.itsvse.com/thread-5011-1-1.html

Windows не запускает сервис Redis, ошибка 1067: процесс неожиданно завершается.
https://www.itsvse.com/thread-5010-1-1.html

CentOS установил Redis 4.0.8
https://www.itsvse.com/thread-4614-1-1.html

Redis настраивает удалённое подключение и пароли доступа
https://www.itsvse.com/thread-4101-1-1.html

Redis опустошает кэш данных
https://www.itsvse.com/thread-4027-1-1.html

Конфигурация сохранения REDIS и выключенная персистенция
https://www.itsvse.com/thread-4012-1-1.html

Разница между сохранением и bgsave в redis
https://www.itsvse.com/thread-4010-1-1.html

Редис — два метода и принципа персистенции
https://www.itsvse.com/thread-4009-1-1.html

У Redis есть три способа начать
https://www.itsvse.com/thread-4008-1-1.html

Метод Redis для скрытия окон командной строки
https://www.itsvse.com/thread-2988-1-1.html

Задача хеш-хеш-значений Redis
https://www.itsvse.com/thread-2587-1-1.html

5 вещей, которые нужно знать перед использованием Redis
https://www.itsvse.com/thread-2580-1-1.html

Redis изменяет номер порта по умолчанию и устанавливает пароль доступа
https://www.itsvse.com/thread-2577-1-1.html

Redis для загрузки 64-битной версии, официальный адрес для загрузки
https://www.itsvse.com/thread-2576-1-1.html
Начиная с redis 2.6.0, у redis встроенный интерпретатор Lua и команда eval для парсирования скрипта Lua.

Синтаксис: eval script numkeys keys args

Параметры:

eval — Redis предоставляет команды для разбора скрипта lua

Скрипт — lua script

numkeys — Задаёт количество ключей в наборе параметров keyname

ключи — набор параметров keyname, представленный глобальным массивом переменной KEYS, начинающим с индекса 1

args — набор ключевых параметров, представленных массивом глобальных переменных ARGV, начиная с индекса 1


Преимущества использования Lua в Redis

Сократите сетевые накладные расходы. Несколько запросов могут отправляться одновременно в виде скриптов для снижения сетевой задержки
Атомная манипуляция. Redis выполняет весь скрипт целиком, без дополнительных команд между ними. Поэтому нет необходимости беспокоиться о состоянии гонки и транзакциях в процессе написания сценариев.
Восстановлен. Шаги, отправленные клиентом, постоянно хранятся в redis, чтобы другие клиенты могли повторно использовать скрипт без необходимости использовать код для выполнения той же логики.

Атомарность сценария

Скрипты Lua не могут иметь трудоёмкие операции или мёртвые циклы, иначе redis не примет другие команды и не будет выполняться, чтобы остановить работу скрипта

Redis использует один интерпретатор Lua для запуска всех скриптов и обеспечивает атомарное выполнение скриптов.Это означает, что во время запуска скрипта не выполняются другие скрипты или команды redis! Поэтому, если текущий скрипт работает медленно, сервер может не смог выполнить команду из-за занятости, например:

Каждый скрипт имеет максимальное ограничение времени выполнения, значение по умолчанию — 5s. Максимальное время выполнения контролируется опцией lua-time-limit в конфигурационном файле redis.conf или напрямую с помощью команд config get и config set. Когда выполнение скрипта достигает максимального времени выполнения, Redis не завершает его активно, а выполняет следующие шаги:

(1) Redis фиксирует, что у сценария заканчивается время

(2) Redis начинает повторно принимать запросы от других клиентов, но принимает только выполнение команд на убийство скриптов и nosave shutdown.

(3) Если скрипт выполняет только операции чтения, используйте команду «kill script» для немедленной остановки скрипта; Если скрипт выполняет операцию записи, только команда shutdown save/nosave разрешена для остановки сервера и предотвращения записи текущих данных на диск. (В этот момент сервер не работает, и данные не будут сохранены)


пример

Выполните скрипт, параметры — 2 ключа и значение, а команда звучит следующим образом:


Deadloop-скрипты, выполняющие следующий скрипт, приводят к тому, что redis не сможет обрабатывать другие команды и застрянет:

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

Выполните более сложные скрипты, если значение ключа равно введённому нашему значению, затем удалите кэш, иначе делайте что-нибудь — команда следующая:

Результаты реализации следующие:



(Конец)




Предыдущий:.NET/C# Lock Principle Monitor даёт подробное объяснение
Следующий:IIS DELETE PUT решение запроса 405
 Хозяин| Опубликовано 10.05.2021 9:18:34 |

Вход по гиперссылке виден.
Команда Redis Script Load используется для добавления скрипта в кэш скриптов, но она не выполняется сразу.

Команда EVAL также добавляет скрипт в кэш скриптов, но сразу же оценивает входный скрипт.

Если данный скрипт уже находится в кэше, никаких действий не предпринимается.

После добавления скрипта в кэш скрипт можно вызвать с помощью контрольной суммы SHA1 с помощью команды EVALSHA. (Это также значит.)Один и тот же скрипт выполняет одно и то же значение sha1 на любом другом сервере Redis

Скрипты могут оставаться в кэше бесконечное время, пока не будет выполнен SCRIPT FLUSH.



 Хозяин| Опубликовано 12.05.2021 11:38:55 |
Определите, находится ли скрипт lua в кэше


После перезапуска Redis скрипт Lua автоматически очищается, не будет постоянным

Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com