local key = KEYS[1];
local result = tonumber(redis.call("get",key))
if result < 1 then
return 1
end
return -1
发生此错误的原因是因为 第三行 result 和 1 进行比较
从这里可以得知resullt最后的结果是nil ,也就是tonumber的时候转不了, 那为什么会出现这种情况呢?
----------------------------------------------------------------------------------------------------------------------------------
1、首先在此之前,在redis中存入的数据是这样的
Key :序列化方式是StringRedisSerializer
Value :序列化方式是默认的,也就是JdkSerializationRedisSerializer
2、后面执行lua脚本时获取这个 value 并将其转换成数字类型则无法转化,result会变成nil,最终导致无法比较。
3、解决方法:
方法一:存入redis的时候注意序列化格式,使用StringRedisSerializer方式存入redis。
方法二:使用StringRedisTemplate进行存入。
格式变成了这样
总结:
Lua在获取到数据时【jdk的序列化方式】无法将起转换为数字