2

我想将对象存储在 Redis 中,其中键不是整数 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(?????????);
}
4

2 回答 2

1

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

于 2012-08-11T01:37:06.240 回答
1

如果您将 MyObject 类设置为:

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

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

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

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

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

As() 返回的类型化 redis 客户端实际上并未处理其连接,因此您编写的代码将使连接保持打开状态。

于 2013-05-30T01:30:57.527 回答