Используя StackExchange.Redis и скрипт Lua, как я могу перебирать ключи, передаваемые в качестве аргументов / параметров?
Я хотел бы сделать: (но не работает)
private RedisResult GetTabularData(List<string> rowIds)
{
const string myScript = "local myTable = {} "
+ "for key in @keys " // Obviously @keys isn't defined here.
// KEYS doesn't seem to work either.
+ "do "
+ "table.insert(myTable, redis.call('smembers', key))"
+ "end "
+ "return myTable ";
var prepared = LuaScript.Prepare(myScript);
return _redisDb.ScriptEvaluate(prepared, rowIds.Select(x => (RedisKey)x));
}
Или я просто передаю 1 значение и делю его, например, (рабочий раствор):
private static async Task<RedisResult[]> GetSetsAsync(string[] setNames)
{
const string myScript = "local resTable = {}"
+ " for key in string.gmatch(@keys, '([^,]+)')"
+ " do"
+ " table.insert(resTable, redis.call('smembers', key))"
+ " end"
+ " return resTable";
var prepared = LuaScript.Prepare(myScript);
var keys = new {keys = (RedisKey) string.Join(",", setNames)};
var res = await _redisDb.ScriptEvaluateAsync(prepared, keys);
return (RedisResult[])res;
}
Ссылки: