将MichaCo \ CacheManager与Redis4You和RedisLab redis服务器

时间:2016-02-11 06:06:16

标签: redis stackexchange.redis redis-server cachemanager

https://github.com/MichaCo/CacheManager/issues/42

您好。我正在使用Redis4You托管的redis服务器。以下配置工作正常。当代码到达行Cache.Add("a", "b");时,它会在那里停留无限时间。当我监视Redis服务器时,我看到控制台上充满了PING。

static class Program
{
    static readonly ICacheManager<string> Cache = CacheFactory.Build<string>("Test", cbcp =>
    {
        cbcp.WithSystemRuntimeCacheHandle("testCache")
            .And
            .WithRedisConfiguration("redis", rcb =>
            {
                rcb.WithEndpoint("<XXX>", 1111)
                   .WithPassword("<YYY>")
                   .WithAllowAdmin()
                   .WithDatabase(1);
            })
            .WithMaxRetries(100)
            .WithRetryTimeout(10)
            .WithRedisBackPlate("redis")
            .WithRedisCacheHandle("redis", true);
    });
    static void Main(string[] args)
    {
        /* It stucks in the first line. */
        Cache.Add("a", "b");
        Console.ReadLine();
    }
}

我调试了代码,CacheManager库提供的LuaScripts如下所示导致错误:

local result=redis.call('HMSET', KEYS[1], 'value', ARGV[1], 'type', ARGV[2], 'expiration', ARGV[3], 'timeout', ARGV[4], 'created', ARGV[5])
if ARGV[3] ~= '0' and ARGV[4] ~= '0' then
    redis.call('PEXPIRE', KEYS[1], ARGV[4])
else
    redis.call('PERSIST', KEYS[1])
end
return result

...这个luascript用在CacheManager库RedisCacheHandler.cs LoadScripts()方法的这部分代码中;

var putLua = StackRedis.LuaScript.Prepare(ScriptPut);
putLua.Load(server);

那么,这里有什么问题? (我不认为这是版本,因为redis4you使用2.4而redislab使用3.0.3的redis。)

1 个答案:

答案 0 :(得分:1)

Redis4You使用Redis v2.4,RedisLab现在使用Redis v3.0.3。因此,RedisLab服务器运行良好但Redis4You存在问题,因为Redis v2.4不支持脚本编写。

CacheManager应解决此问题。顺便说一句,您可以使用IServer.Features.Scripting检查此可用性。