问题遇到的现象和发生背景
使用org.redisson.api.RScript 如何在lua脚本中进行阻塞等待
如果不进行阻塞 会造成服务cpu超限 并且会给redis集群带来很大压力
遇到的现象和发生背景,请写出第一个错误信息
类似实现RateLimiter的acquire 需要阻塞等待下
用代码块功能插入代码,请勿粘贴截图
String script = LuaScript.getTokenBucketRateLimiterScript();
List<Long> results = rScript.eval(RScript.Mode.READ_WRITE, script, RScript.ReturnType.MULTI, keys, rule.getRate(), rule.getBucketCapacity(), rule.getRequestedTokens());
script部分脚本
local requested = tonumber(ARGV[3])
local now = redis.call('TIME')[1]
local delta = math.max(0, now-last_refreshed)
local filled_tokens = math.min(capacity, last_tokens+(delta*rate))
local allowed = filled_tokens >= requested
while(not(allowed))
do
now = redis.call('TIME')[1]
delta = math.max(0, now-last_refreshed)
filled_tokens = math.min(capacity, last_tokens+(delta*rate))
allowed = filled_tokens >= requested
end
运行结果及详细报错内容
运行结果ok
我的解答思路和尝试过的方法
尝试在while中添加 os.execute("sleep " .. 1)
while(not(allowed))
do
os.execute("sleep " .. 1)
now = redis.call('TIME')[1]
delta = math.max(0, now-last_refreshed)
filled_tokens = math.min(capacity, last_tokens+(delta*rate))
allowed = filled_tokens >= requested
end
但发生了报错
ERR Error running script (call to f_005cecb2922feef769db26c02a1a73b5ed10082f): @enable_strict_lua:15: user_script:23: Script attempted to access nonexistent global variable 'os'.
请问下该如何解决呢