1

いくつかの提案に従って、次のように時系列順にデータを保存するために、ZADDBookSleeve を通じてRedis を使用しています。SortedSets.Add()

TimeSpan span = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0)); 
_connection.SortedSets.Add(_db, thisChannel, message, span.TotalSeconds, false);

ServiceStack の AdminUI を使用すると、Redis に格納された値を確認できます。

値は UTC として保存されます。値の範囲を取得できるようにしたいと考えています。

簡単に言えば、最近値を保存したので、次のことを試しました。

var subset = _connection.Wait(_connection.SortedSets.Range(_db, thisChannel, span.TotalSeconds - 10000, span.TotalSeconds, offset: 0, count: 50));

VS では、コレクションには double 値と、Byte[] 型の Key が含まれます。これは保存されたデータのバイト配列だと思います-文字列として保存しましたが?

ここでいくつかのコードを確認しましたが、この関数の使用方法に関する詳細なドキュメントとサンプルがあるかどうかを知りたいですか?

4

1 に答える 1

0

これで気付いた興味深い点はRangeString、シナリオに理想的であるはずの にoffsetパラメーターがないことです。私はそれを修正します-しかし、今のところRange、キーを手動で使用およびデコードできます(redisはバイナリキーを許可します;それらは文字列である必要はありません); ただし、以下は正常に通過します。

[Test]
public void SO14991819()
{
    const int _db = 0;
    const string thisChannel = "SO14991819";
    const string message = "hi";
    using (var _connection = Config.GetUnsecuredConnection())
    {
        _connection.Keys.Remove(_db, thisChannel); // start from known state

        TimeSpan span = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0));
        double val = span.TotalSeconds;

        _connection.SortedSets.Add(_db, thisChannel, message, val, false);

        var subset = _connection.Wait(_connection.SortedSets.Range(
            _db, thisChannel, span.TotalSeconds - 10000, span.TotalSeconds, offset: 0, count: 50));

        Assert.AreEqual(1, subset.Length);
        Config.AssertNearlyEqual(val, subset[0].Value);
        Assert.AreEqual(message, Encoding.UTF8.GetString(subset[0].Key));
    }
}

私は確かに取得しませんMethodNotImplementedException。私は述べるべきです:私は現在の「頭」に対してテストしています。それは私が利用できるものだからです。


情報: 私のローカル コピーではRangeString、オフセット/カウントを使用して実装したため、次のようにパスします。

var subset = _connection.Wait(_connection.SortedSets.RangeString(
    _db, thisChannel, span.TotalSeconds - 10000, span.TotalSeconds, offset: 0, count: 50));

Assert.AreEqual(1, subset.Length);
Config.AssertNearlyEqual(val, subset[0].Value);
Assert.AreEqual(message, subset[0].Key);
于 2013-02-21T15:18:59.040 に答える