Return 从 Lua 脚本设置
Return Set from Lua Script
Lua 脚本:
local r = {}
for _, m in pairs(ARGV) do
if redis.call('SISMEMBER', KEYS[1], m) == 1 then
r[#r + 1] = m
end
end
return r
我用的是spring boot的redis-template
@Autowired
private RedisScript<Set> redisScript;
Set<String> set = redisTemplete.execute(redisScript,"a", Arrays.asList("1", "2")); --to execute redis lua scipt
Above redisTemplete.execute command not working error: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Set
It works when I use assign result to List instead of Set List<String> set = redisTemplete.execute(redisScript, "a", Arrays.asList("1", "2")); --working
有没有办法修改 Lua 脚本,使其 returns 设置而不是列表?
Interface RedisScript<T>
Type Parameters:
T - The script result type.
Should be one of Long, Boolean, List, or deserialized value type. Can be null if the script returns a
throw-away status (i.e "OK")
所以你的 redis 脚本一开始就不应该有 Set 类型。
执行将return那个类型。因此,如果您想要一个 Set,您可能会将 List 转换为 Java 端的 Set。
来自https://redis.io/commands/eval
Note: as you can see Lua arrays are returned as Redis multi bulk
replies, that is a Redis return type that your client library will
likely convert into an Array type in your programming language.
虽然您可以使用表格在 Lua 中实现集合,但我认为没有办法通过您的 API 获取该集合,因为它将被转换为多批回复,即然后转换为列表。
Lua 脚本:
local r = {}
for _, m in pairs(ARGV) do
if redis.call('SISMEMBER', KEYS[1], m) == 1 then
r[#r + 1] = m
end
end
return r
我用的是spring boot的redis-template
@Autowired
private RedisScript<Set> redisScript;
Set<String> set = redisTemplete.execute(redisScript,"a", Arrays.asList("1", "2")); --to execute redis lua scipt
Above redisTemplete.execute command not working error: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Set
It works when I use assign result to List instead of Set List<String> set = redisTemplete.execute(redisScript, "a", Arrays.asList("1", "2")); --working
有没有办法修改 Lua 脚本,使其 returns 设置而不是列表?
Interface RedisScript<T>
Type Parameters: T - The script result type. Should be one of Long, Boolean, List, or deserialized value type. Can be null if the script returns a throw-away status (i.e "OK")
所以你的 redis 脚本一开始就不应该有 Set 类型。
执行将return那个类型。因此,如果您想要一个 Set,您可能会将 List 转换为 Java 端的 Set。
来自https://redis.io/commands/eval
Note: as you can see Lua arrays are returned as Redis multi bulk replies, that is a Redis return type that your client library will likely convert into an Array type in your programming language.
虽然您可以使用表格在 Lua 中实现集合,但我认为没有办法通过您的 API 获取该集合,因为它将被转换为多批回复,即然后转换为列表。