我想在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(?????????);
}
答案 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客户端实际上并没有处理它的连接,所以你编写的代码会打开连接。