我正在使用 StackExchange.Redis 客户端访问 Azure Redis 缓存。我正在创建一个哈希集,如下所示:
Database.HashSet("HashSetKey", "EntryKey", "EntryValue");
Database.KeyExpire("HashSetKey", TimeSpan.MaxValue);
即使我将到期时间指定为 TimeSpan.MaxValue,哈希集也会在几分钟未使用后被删除。
我错过了什么?
我正在使用 StackExchange.Redis 客户端访问 Azure Redis 缓存。我正在创建一个哈希集,如下所示:
Database.HashSet("HashSetKey", "EntryKey", "EntryValue");
Database.KeyExpire("HashSetKey", TimeSpan.MaxValue);
即使我将到期时间指定为 TimeSpan.MaxValue,哈希集也会在几分钟未使用后被删除。
我错过了什么?
将 TimeSpan.MaxValue 设置为密钥到期是没有意义的。您根本不应该设置它,因为它永远不应该被删除。这就是 StackExchange redis 客户端所做的 - 当您放置 TimeSpan.MaxValue 时,它实际上根本没有设置过期,它调用 PERSIST 命令
在 StackExchange redis 客户端中查找类 RedisDatabase.cs,方法是
Message GetExpiryMessage( RedisKey key, CommandFlags flags, TimeSpan? expiry, out ServerEndPoint server)
https://github.com/StackExchange/StackExchange.Redis
你也可以调用 Database.KeyTimeToLive 方法,它会为你的 key 返回 0。
它被驱逐的原因可能是因为您的 Azure 缓存设置,它可能设置了 maxmemory 和 evictions 策略:http://redis.io/topics/lru-cache