我是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的默认行为?
如果我走错了路,请告诉我。
答案 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最小的密钥(也是最旧的密钥)。