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

Using Redis as Cache and C# client

我是 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 会自动为我清除旧值吗? (我假设没有)如果没有,有没有办法让 redis 的默认行为通过我在下面使用的 Set 方法来实现?

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

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

基本上,您从配置文件中设置最大内存,而不是从 redis-cli 中。您还可以指定一个 maxmemory-policy,它是 redis 在用完指定内存时执行的一组过程。根据 that 配置文件,Redis 在内存不足时使用了 6 个策略:

volatile-lru -> 使用 LRU 算法删除带有过期设置的密钥

allkeys-lru -> 根据LRU算法移除任意key

volatile-random -> 删除带有过期设置的随机密钥

allkeys-random -> 删除随机密钥,任意密钥

volatile-ttl -> 移除过期时间最近的密钥(minor TTL)

noeviction -> 根本不会过期,只是return写操作错误

您可以使用 maxmemory-policy 指令来设置这些行为,该指令位于 redis.conf 文件的 LIMITS 部分(在 maxmemory 指令上方)。

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