Я использую такой код для достижения распределенной блокировки Redis:
DefaultRedisScript<String> script = new DefaultRedisScript<>();
script.setScriptText("if not redis.call('get', KEYS[1]) then return redis.call('set', KEYS[1], ARGV[1],'ex',ARGV[2],'nx') else return false end");
String result = redisTemplate.execute(script,
Collections.singletonList("REDIS_KEY_INDEX_LOCK"), "exists", "60");
Я ожидаю, что результат будет среди "OK"
, "Nil"
и "false"
. Я проверил документ, set
директива с 'NX'
, 'EX'
вернет "OK"
или "Nil"
.В результате мой код показывает, что ключ REDIS_KEY_INDEX_LOCK
успешно установлен в Redis со значением exists
, но значение переменной Java result
равно null
.redisTemplatet
переменная является экземпляром StringRedisTemplate
, я использую Spring-Data-Redis
.
Пожалуйста, помогите мне, объясните, почему я получил неожиданный результат и как его исправить.