Why I keep getting this error " Wrong number of args calling Redis command From Lua script" even I get desired output
Question:
I trying to execute this lua script i get proper output too. But i keep getting Wrong number of args calling Redis command From Lua script
def new_get_following(self, start, count, user_id=0):
script = """
local envs = redis.call('zrevrange',KEYS[1],ARGV[3],ARGV[4]);
redis.call('sadd',ARGV[1],unpack(envs));
local favs = redis.call('sinter',ARGV[2],ARGV[1]);
local acts= redis.call('mget',unpack(envs));
redis.call('del',ARGV[1]);
return {favs,envs,acts}
"""
count = int(start) + int(count) - 1
print count
fav_key = self.fav_key + ":" + str(user_id)
following_stream_key = self.following_stream_key + ":" + str(user_id)
tmp_key = int(time.time())
return self.exectute(script, args=[tmp_key, fav_key, start, count], keys=[following_stream_key])
Answers:
Maybe it is just a typo and has already been corrected but:
self.exectute
shouldn’t it be self.execute
?
In the code last line is causing error.
local envs = redis.call('zrevrange',KEYS[1],ARGV[3],ARGV[4]);
local acts= redis.call('mget',unpack(envs));
As if envs is empty table then second line:
local acts= redis.call('mget',unpack(envs));
becomes this:
local acts= redis.call('mget',unpack());
so lua keeps throwing error. For avoid this error we can use redis.pacall
which gives Response error object which can be checked in output can handle error. So final code should be
def new_get_following(self, start, count, user_id=0):
script = """
local envs = redis.call('zrevrange',KEYS[1],ARGV[3],ARGV[4]);
redis.call('sadd',ARGV[1],unpack(envs));
local favs = redis.call('sinter',ARGV[2],ARGV[1]);
local acts= redis.pcall('mget',unpack(envs));
redis.call('del',ARGV[1]);
return {favs,envs,acts}
"""
count = int(start) + int(count) - 1
print count
fav_key = self.fav_key + ":" + str(user_id)
following_stream_key = self.following_stream_key + ":" + str(user_id)
tmp_key = int(time.time())
return self.exectute(script, args=[tmp_key, fav_key, start, count], keys=[following_stream_key])
I trying to execute this lua script i get proper output too. But i keep getting Wrong number of args calling Redis command From Lua script
def new_get_following(self, start, count, user_id=0):
script = """
local envs = redis.call('zrevrange',KEYS[1],ARGV[3],ARGV[4]);
redis.call('sadd',ARGV[1],unpack(envs));
local favs = redis.call('sinter',ARGV[2],ARGV[1]);
local acts= redis.call('mget',unpack(envs));
redis.call('del',ARGV[1]);
return {favs,envs,acts}
"""
count = int(start) + int(count) - 1
print count
fav_key = self.fav_key + ":" + str(user_id)
following_stream_key = self.following_stream_key + ":" + str(user_id)
tmp_key = int(time.time())
return self.exectute(script, args=[tmp_key, fav_key, start, count], keys=[following_stream_key])
Maybe it is just a typo and has already been corrected but:
self.exectute
shouldn’t it be self.execute
?
In the code last line is causing error.
local envs = redis.call('zrevrange',KEYS[1],ARGV[3],ARGV[4]);
local acts= redis.call('mget',unpack(envs));
As if envs is empty table then second line:
local acts= redis.call('mget',unpack(envs));
becomes this:
local acts= redis.call('mget',unpack());
so lua keeps throwing error. For avoid this error we can use redis.pacall
which gives Response error object which can be checked in output can handle error. So final code should be
def new_get_following(self, start, count, user_id=0):
script = """
local envs = redis.call('zrevrange',KEYS[1],ARGV[3],ARGV[4]);
redis.call('sadd',ARGV[1],unpack(envs));
local favs = redis.call('sinter',ARGV[2],ARGV[1]);
local acts= redis.pcall('mget',unpack(envs));
redis.call('del',ARGV[1]);
return {favs,envs,acts}
"""
count = int(start) + int(count) - 1
print count
fav_key = self.fav_key + ":" + str(user_id)
following_stream_key = self.following_stream_key + ":" + str(user_id)
tmp_key = int(time.time())
return self.exectute(script, args=[tmp_key, fav_key, start, count], keys=[following_stream_key])