web-dev-qa-db-ja.com

RedisがサポートするASP.NETSessionStateプロバイダー

私は現在、Booksleeveを使用してRedisがサポートするASP.NETSessionStateカスタムプロバイダーを開発しています。 Redisは、SessionStateに完全に適合しているように見えました(使用する必要がある場合)。理由は次のとおりです。

  • RedisはRDBMSのように永続的に保存できますが、はるかに高速です。
  • Key/Valueデータストアは、SessionStateのインターフェイスにより適しています。
  • データは(デフォルトのセッションプロバイダーのように)インプロセスで保存されないため、SessionStateはWebサーバーの再起動やクラッシュなどを存続させることができます。
  • それが必要になった場合、Redisは水平方向に簡単にシャーディングできます。

ですから、私たち(私の会社)はGitHubでのオープンソース化を検討しているので、これが誰にとっても役立つかどうか疑問に思っています。考え?

更新:


私は昨日これの最初のバージョンをリリースしました: https://github.com/angieslist/AL-Redis/blob/master/AngiesList.Redis/RedisSessionStateStore.cs

42
NathanD

クライアントとして(Booksleeveではなく)ServiceStatck.Redisを使用して、RedisベースのSessionStateStoreProviderを作成しました GitHubにあります

Install-Package Harbour.RedisSessionStateStoreを使用してNuGet経由でインストールできます。

@NathanDのアプローチにはいくつかの癖がありました。私の実装では、ロックは個別のキー(Redisへのラウンドトリップが少ない)ではなく、セッション値とともに保存されます。さらに、ServiceStack.Redisを使用するため、プールされた接続を使用できます。

最後に、テストされます。これは、@ NathanDのアプローチからの私の最大の転換点でした。すべてのユースケースを手動で実行せずに、実際に機能したかどうかを知る方法はありませんでした。

16
TheCloudlessSky

これは便利なだけでなく、この道を進む予定がある場合は、Redisのハッシュデータ型をよく調べてください。私たちのアプリケーションでは、セッションは基本的にキーと値の小さなコレクションです(つまり:{user_id: 7, default_timezone: 'America/Chicago', ...})ユーザーセッション全体が単一のRedisハッシュに保存されます。

セッションデータが類似している場合、ハッシュを使用するとデータのマッピングが簡素化されるだけでなく、Redisはスペースを使用します はるかに効率的に このアプローチでは。

私たちのアプリはRubyですが、 私たちが書いたもの からまだいくつかの用途が見つかるかもしれません。

3
Carl Zulauf