Разбор RedisScript RedisTemplate в SpringBoot

Redis

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

Что если я выполню lua-скрипт в RedisTemplate? Проверьте следующий код метода, это введение скрипта содержимого lua вRedisScriptподклассDefaultRedisScriptВ классе это класс поддержки сценариев, поддерживаемый Redis, для получения дополнительной информации см. =>ссылка на скрипт Redis

protected RedisScript<Long> getRedisLockScript() {
        String script = "local key = ARGV[1];local expiration = ARGV[2];local value = 1;";
        script += "if redis.call('EXISTS', key) == 1 then return -1 else redis.call('SET', key, value);redis.call('EXPIRE', key, expiration);return 1;end";
        return new DefaultRedisScript<>(script, Long.class);
    }

Здесь вы можете просмотреть процесс выполнения исходного кода, просмотрев метод execute:

сначала введитеRedisTemplate.javaсерединаexecute()метод
Через перегрузку метода, чтобы найти конкретный метод класса выполнения, в основном есть следующие 4 шага:

  1. execute()метод с тремя параметрами
  2. execute()метод с пятью параметрами
  3. execute()Тело метода с пятью параметрами
  4. Наконецeval()метод для выполнения команды скрипта redis
    Далее, чтобы войтиeval()Соответствующий класс реализации методаDefaultScriptExecuteсередина: Сначала передайте значение sha напрямую.Если предварительно загруженный скрипт lua не может быть найден в Redis и сообщается об ошибке, поймайте ошибку, сериализуйте весь скрипт и передайте его в Redis для выполнения:

Смотрим на код выполнения следующей сериализации скриптаscriptBytes(), и соответствующий ему класс выполненияStringRedisSerializerсвоего рода

ВходитьStringRedisSerializerможно увидеть, что операция сериализации на самом деле является операцией сериализации строк.

На данный момент анализ исходного кода RedisTemplate RedisTemplate в SpringBoot завершен~