Распределенная блокировка между приложением Java и Nodejs с помощью Redis - PullRequest
0 голосов
/ 23 марта 2020

В моем текущем проекте я имею дело с двумя процессами, один из которых написан на Java, другой на NodeJs. Оба приложения выполняют некоторые вычисления и сохраняют некоторые данные в Redis, но по некоторой причине согласованности только один из них должен одновременно обращаться к ресурсам Redis. После прочтения официальной документации Redis (https://redis.io/topics/distlock) я подумал об использовании алгоритма Redlock для распределенной блокировки. Я обнаружил, что когда я использую node-redlock (рекомендуется библиотека для NodeJS) для блокировки ключа 'redis-lock', он сохраняется со случайным значением и временем истечения в Redis, тогда как при использовании Redisson (рекомендуемая библиотека для Java) ) для блокировки того же «redis-lock»; ключ это хранит ха sh. Я сталкиваюсь с некоторыми ошибками, когда процесс Java уже создал и заблокировал ключ, а процесс NodeJs пытается получить к нему доступ, поскольку ожидает, что ключ имеет тип простой строки, а не ha sh. Я не понимаю, почему две библиотеки, реализующие один и тот же алгоритм, используют разные структуры данных для блокировки ключа. Пожалуйста, помогите мне решить проблему. Иначе, есть ли другое простое решение для реализации распределенной блокировки между двумя приложениями (я знаю, что могу также использовать БД, но хотел бы использовать Redis, поскольку она уже используется в контексте приложений)? Спасибо.

...