在Redis中使用DateTime键存储对象

时间:2012-08-10 20:06:00

标签: c# redis servicestack

我想在Redis中存储对象,其中key不是整数Id,而是DateTime类型的属性。可能吗?如何告诉Redis哪些属性是关键?仅仅是名为“Id”的任何财产?

如果我把对象放到这样的缓存中:

var redisClient = new RedisClient("localhost", 30050);
using (var myRedis = redisClient.As<MyObject>())
{
    myRedis.Store(myObject);
}

我怎么能在以后得到它?

var redisClient = new RedisClient("localhost", 30050);
using (var myRedis = redisClient.As<MyObject>())
{
    myRedis.GetById(?????????);
}

2 个答案:

答案 0 :(得分:1)

作为int的Unix时间戳将在Redis中很好地工作。如果您需要时区支持,可能需要额外的信息。

答案 1 :(得分:1)

如果将MyObject类设置为:

class MyObject : IHasId<DateTime>
{
  public DateTime Id {get;set;}
  .......
}

然后它应该工作正常。 Redis并不关心你的“Id”是什么。 ServiceStack类型的redis客户端关心它,因为它接受您的“Id”属性并使用它来存储您的对象。如果你想使用日期时间作为你的密钥,那就这样吧。

稍后通过将datetime传递给client.GetById()来获得它。也就是说,除非您定义基于日期时间的键的粒度级别,否则管理似乎是一个有点棘手的键。我的意思是,你需要决定你是否只关心日期部分,或者你是否关心日期+时间到分钟,或者日期+时间到第二个等等。

此外 - 您应该将redis客户端代码更改为:

using(var client = new RedisClient("..."))
{
         var myRedis = client.As<MyObject>();
         ......
}

As()返回的类型化redis客户端实际上并没有处理它的连接,所以你编写的代码会打开连接。