即使TimeSpan.MaxValue指定为到期,也会从Redis缓存中删除HashSet

时间:2015-07-01 22:20:44

标签: c# redis stackexchange.redis azure-redis-cache

我正在使用StackExchange.Redis客户端访问Azure Redis缓存。我正在创建一个hashset,如下所示:

Database.HashSet("HashSetKey", "EntryKey", "EntryValue");
Database.KeyExpire("HashSetKey", TimeSpan.MaxValue); 

即使我将Expiry指定为TimeSpan.MaxValue,也会在几分钟未使用后删除hashset。

我缺少什么?

1 个答案:

答案 0 :(得分:1)

将TimeSpan.MaxValue设置为密钥到期没有意义。你根本不应该设置它,因为永远不应该删除它。这就是StackExchange redis客户端所做的事情 - 当你放入TimeSpan.MaxValue它实际上根本没有设置到期时,它调用PERSIST命令
在StackExchange中,redis客户端查找RedisDatabase.cs类 方法是

消息GetExpiryMessage(RedisKey键,CommandFlags标志,TimeSpan?到期,输出ServerEndPoint服务器)

https://github.com/StackExchange/StackExchange.Redis
您也可以调用Database.KeyTimeToLive方法,它将为您的密钥返回0。
它被驱逐的原因可能是因为您的Azure缓存设置,它可能设置了maxmemory和驱逐策略:http://redis.io/topics/lru-cache