将 Lua 表转换为带有 Spring Data Redis 的 Java `Map`

我试图运行一个 Lua 脚本,最终返回一个 Lua 表,然后使用 Spring Data Redis 将其转换为 Java Map。当结果为数组样式的 Lua 表,例如 {"a","b","c"} 时,可以将其转换为 List<String>。然而,当 Lua 表结果具有像 {"a":"A", "b":"B"} 这样的键时,无法将其转换为 Map<String, String>

对于两种情况,我都使用 RedisTemplate#execute(RedisScript<T>脚本,List<K> keys,Object ... args),并使用 DefaultRedisScript<> 作为第一个参数。

Lua 表(数组样式) -> List.class - 可用

Lua 脚本(简化版)

local result = {}

for i=1, 3, 1 do
    result[i]="test"
end

return result

Java 代码

@Test
public void luaTableArrayStyleConvert2ListTest(){
    List<String> keys = ...一些键...;
    DefaultRedisScript<List>脚本= new DefaultRedisScript<>();
    script.setResultType(List.class)
    script.setScriptTest(...上面的 Lua 脚本...)
    List<String> result = redisTemplate.execute(script, keys); // {"test","test","test"}
}

Lua 表(键值)-> Map.class - 不可用!

Lua 脚本(简化版)

local result = {}

for i=1, 3, 1 do
    result["test"]="test"
end

return result

Java 代码

@Test
public void luaTableArrayStyleConvert2ListTest(){
    List<String> keys = ...一些键...;
    DefaultRedisScript<Map>脚本=新DefaultRedisScript<>();
    script.setResultType(Map.class)
    script.setScriptTest(...上面的 Lua 脚本...)
    Map<String,String> result = redisTemplate.execute(script, keys); // null!!
}

我了解org.springframework.data.redis.connection.ReturnType清楚地显示了 Redis 脚本命令的返回类型不考虑 Map.class。然而,我希望有经验将 Lua 表转换为 JavaMap的人能够帮助。

谢谢。

点赞