2

キーが整数 ID ではなく、DateTime 型のプロパティであるオブジェクトを Redis に格納したいと考えています。出来ますか?どのプロパティがキーであるかを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

int としての 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」プロパティを受け取り、それを使用してオブジェクトを保存するため、気にします。日時をキーとして使用したい場合は、それで構いません。

datetime を client.GetById() に渡すことで、後で取得できます。そうは言っても、日時ベースのキーの粒度レベルを定義しない限り、管理するのはやや難しいキーのようです。つまり、日付部分のみを気にするか、日付と時刻を分単位まで、または日付と時刻を秒単位までなど、気にするかを決定する必要があります。

また、redis クライアント コードを次のように変更する必要があります。

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

As() によって返される型指定された redis クライアントは、実際にはその接続を破棄しないため、記述されたコードは接続を開いたままにします。

于 2013-05-30T01:30:57.527 に答える