2012-08-10 24 views
2

的DateTime密鑰存儲對象我想存儲對象的Redis,其中關鍵不是整數ID但DateTime類型的屬性。可能嗎?如何告訴Redis哪些屬性是關鍵?僅僅是名爲'Id'的任何屬性?在Redis的

如果我把對象緩存是這樣的:

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

關鍵不一定是對象的屬性。它可以是任何東西。 Redis不是面向文檔的數據庫或關係數據庫。 – 2012-08-10 22:41:07

+0

我更新了問題 – 2012-08-13 12:53:17

+0

這對我沒有任何意義。也許你應該添加你使用的語言/框架/ redis客戶端。這不是服務器端的問題。 – 2012-08-13 13:47:21

回答

1

作爲整數的Unix時間戳在Redis中可以很好地工作。如果您需要時區支持,您可能需要額外的信息。

+0

我更新了問題 – 2012-08-13 12:53:46

1

如果你設置你的MyObject類爲:

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

那麼它應該工作的罰款。 Redis不關心你的「Id」是什麼。 ServiceStack類型的redis客戶端很在意,因爲它需要你的「Id」屬性並用它來存儲你的對象。如果你想使用日期時間作爲你的鑰匙,那就這樣吧。

你會後來得到它通過傳遞日期時間爲client.GetById()。這就是說,除非您定義基於日期時間的密鑰的粒度級別,否則似乎是一個有點棘手的密鑰。我的意思是,你需要決定你是否只關心日期部分,或者如果你關心日期+時間到最低點,或者日期+時間低到第二個,等等。

而且 - 你應該改變你的Redis的客戶端代碼:通過爲()返回實際上並不出售其連接

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

的類型Redis的客戶端,讓你的代碼編寫會離開連接打開。