Получить вывод Redis Lua Script в C # - PullRequest
0 голосов
/ 29 января 2019

Перед реализацией скрипта Lua я читал хэши в цикле и иногда получал ошибку соединения.

Чтобы уменьшить сетевые вызовы, я пробовал скрипт Lua (ниже), он работает

local result = {}
local ruletypes = @RuleTypes
local assetId = @AssetId

for rule in ruletypes:gmatch("([^,]+)") do
local ruleType = rule..'_hash'
local val = redis.call('HGET', ruleType, assetId)
result[#result + 1] = val
end

return result

C # CacheService для выполнения сценария Lua

public class CacheService
{
    private readonly IDatabase cache;
    private static readonly string connectionString = ConfigurationManager.AppSettings["RedisConnection"];
    private static LoadedLuaScript ruleLuaScript;
    public CacheService()
    {
        this.cache = Connection.GetDatabase();
        ruleLuaScript = LoadLuaScriptForGetRule(@"Lua/getMultiHashWithParameter.lua");
    }

    private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
    {
        return ConnectionMultiplexer.Connect(connectionString);
    });

    public static ConnectionMultiplexer Connection
    {
        get
        {
            return lazyConnection.Value;
        }
    }        

    private LoadedLuaScript LoadLuaScriptForGetRule(string scriptUrl)
    {
        string script = File.ReadAllText(scriptUrl);
        LuaScript luaScript = LuaScript.Prepare(script);
        var endpoints = Connection.GetEndPoints();
        var endpoint = endpoints[0];
        IServer server = Connection.GetServer(endpoint);
        return luaScript.Load(server);
    }
    public void PrepareLuaScript(dynamic parameters)
    {
        RedisResult result = this.cache.ScriptEvaluate(ruleLuaScript, parameters);
        if (!result.IsNull)
        {
            //how to read result?
        }
    }
}

Вывод LuaScript

enter image description here

Вопросы

  1. Я не уверен, это правильный способ регистрации Lua Script?

  2. Какполучить данные JSON от RedisResult?Есть ли какое-нибудь общее решение?

...