速度が必要な場合は、構造体または「キャッシュ」をredisに保存するときに、できる限り準備する必要があります。製品をHSET
に保存する場合 、このHSET
の「製品データ」メンバーの横にカテゴリカウンター(カテゴリごとに1つ)を追加します 、HINCRBY
を使用できます カウンターをインクリメント/デクリメントします。
一般的に(ニーズに合わせてRedisキャッシュを設計する):不要なデータを取得しないようにする必要があります。
集約されたレポートの保存(/更新/削除)と取得には、Luaスクリプトを使用することをお勧めします。 LuaスクリプトはRedisサーバーで実行されます。 ServiceStackはそれらをサポートします(SCRIPT LOAD
+ EVALSHA
または単にEVAL
)、BookSleeve C#クライアントモジュール(これを使用しており、少し高速です。'faster' )を試すこともできます。 :優れたredis-dataデザインが最初に来るのは当然です)。BookSleeveC#クライアントは、マルチスレッドのredisパイプラインに焦点を当てています。これは、大規模なデータセットを処理するときにおそらく必要なものです。 ServiceStackでもパイプライン化が可能である必要があります。
カテゴリと製品のIDが整数の場合は、これをZSET
と組み合わせることもできます。 、IDをスコアフィールドとして使用できます。 ZRANGEBYSCORE
を使用 「レコード」を直接取得できます。この手法は、IDが15桁以下を使用し、「スコア」の小数部分を使用しない限り安全です。したがって、IDは-999999999999999から999999999999999の範囲内にとどまる必要があります。注:これらの制限は、Redisサーバーが実際にスコア(フロート)をredis文字列表現として内部に保存するために存在します。
これがお役に立てば幸いです、TW