Как перебрать все ключевые параметры, передаваемые через ScriptEvaluate? - PullRequest
1 голос
/ 02 июля 2019

Используя 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;
}

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...