使用Redis作为缓存和C#客户端

时间:2015-10-23 19:13:58

标签: redis servicestack.redis

我是Redis的新手,并尝试找出一种简单的方法将Redis用作我的C#应用​​程序的本地缓存。我已经从https://github.com/MSOpenTech/redis/releases

下载并运行了redis-server

我可以成功存储一个键值并按如下方式检索它:

        var redisManager = new PooledRedisClientManager("localhost:6379");
        using (var redis = redisManager.GetClient())
        {
            redis.Set("mykey_1", 15, TimeSpan.FromSeconds(3600));
            // get typed value from cache
            int valueFromCache = redis.Get<int>("mykey_1"); // must be = 
        }

我想限制Redis在我的服务器上使用的内存量,并且我还希望redis在内存填充时自动清除值。我尝试了maxmemory命令但是在redus-cli程序中找不到maxmemory。

Redus会自动为我清除旧的价值吗? (我假设没有),如果没有,有没有办法让我可以使用我在下面使用的Set方法做​​redis的默认行为?

如果我走错了路,请告诉我。

1 个答案:

答案 0 :(得分:1)

此处描述了您的问题的答案:What does Redis do when it runs out of memory?

基本上,您从配置文件中设置maxmemory,而不是从redis-cli设置。您还可以指定maxmemory-policy,这是一组redis在超出指定内存时执行的过程。根据{{​​3}}配置文件,Redis在内存不足时总共使用了6个策略:

volatile-lru - &gt;使用LRU算法删除带有过期集的密钥

allkeys-lru - &gt;根据LRU算法删除任何密钥

volatile-random - &gt;删除带有过期集的随机密钥

allkeys-random - &gt;删除随机密钥,任意密钥

volatile-ttl - &gt;删除具有最近到期时间(次要TTL)的密钥

noeviction - &gt;不要过期,只需在写操作上返回错误

您可以使用redis.conf文件的LIMITS部分(maxmemory指令上方)中找到的 maxmemory-policy 指令设置这些行为。

因此,您可以为存储在Redis中的每个密钥设置一个到期时间(大that时间),并设置 volatile-ttl 策略。这样,当Redis内存不足时,根据您设置的策略,删除TTL最小的密钥(也是最旧的密钥)。