Redis adossés à des ASP.NET SessionState fournisseur
Je suis en train de développer un ASP.NET SessionState fournisseur personnalisé qui est soutenu par le Redis à l'aide de Booksleeve. Redis semblait être un ajustement parfait pour SessionState (si vous devez l'utiliser) car:
- Redis pouvez stocker durablement comme un SGBDR, cependant il est beaucoup plus rapide.
- Une Clé/Valeur de la banque de données s'adapte à l'interface de SessionState.
- Puisque les données ne sont pas stockées dans le processus (comme la Session par défaut du fournisseur), SessionState peut vivre en dehors du serveur web redémarre, les accidents, etc.
- Redis est facile d'éclat à l'horizontale si cela devient une nécessité.
Donc, je me demande si ce sera utile à quelqu'un, puisque nous (mon entreprise) envisagent open source sur GitHub. Pensées?
Mise à JOUR:
Je l'ai fait sortir une première version de ce hier: https://github.com/angieslist/AL-Redis/blob/master/AngiesList.Redis/RedisSessionStateStore.cs
- Serait très utile - en fait, j'ai commencé à enquêter sur moi-même pas trop longtemps, alors je serais certainement contribuer à ce projet un peu. Je recommande fortement que si vous plongez dans cette, vous générez sur le dessus de la ServiceStack ICacheClient interface. Redis est l'un des rares inclus cache clients, y compris un processus en mémoire cache qui serait formidable pour le débogage.
- Si c'est utile pour vous, il sera utile à d'autres. Le faire.
- Jusqu'à présent j'ai coincé avec Booksleeve comme le Redis client lib. J'ai d'abord regardé l'aide de SS ICacheClient, mais j'ai rapidement réalisé que le Redis hachage de type de données est la solution idéale pour SessionData. J'ai donc besoin d'un niveau inférieur, Redis-spécifiques du client. Aussi, depuis que j'ai besoin de faire, par HttpRequest de verrouillage afin de correctement mettre en œuvre les mêmes fonctionnalités que le haut-ASP.NET Session fournisseurs, j'ai pensé que je devrais rester plus près du métal. Finalement, cependant, je voudrais faire de verrouillage en option configurable.
- Surpris de cette question n'était pas immédiatement fermé de ne pas constructif par les mods...(la grande idée de projet btw)
- Je ne prévoyez sur l'utilisation de ServiceStack.Texte pour fournir une gamme de choix pour la sérialisation. Je reçois une sérialisation native déjà à l'aide de SessionStateItemCollection.Désérialiser/Sérialiser. Ensuite, je peux ajouter JSON et JSV à l'aide de SS.Le texte, ainsi que d'une interface pour mettre en œuvre afin que n'importe qui peut créer leur propre sérialiseur.
- Curieusement j'ai l'intention de parler de ce sujet demain à Øredev 2011. Nous (SE) de ne pas ajouter un fournisseur d'état de session, tout simplement parce que nous n'avons pas utiliser les fonctions intégrées d'état de la session de modèle, mais ce serait une chose très pratique pour ajouter. Bien sûr, j'ai aussi quelques idées sur la candidat sérialiseurs ;p
- Marc, sur ma TODO est enfichable en charge de différents sérialiseurs. Je suis en train de penser que built-ins inclure le JSON de @demisbellot et votre Protobuf
- Salut, quand tu vas ajouter un téléchargement pour ce projet?
- ne pas utiliser la fonction intégrée de session-modèle de l'état". Kevin a écrit dans meta.stackexchange.com/a/69172/51 qui "cache local contient des choses comme les sessions de l'utilisateur. Si vous utilisez les sessions et maintenant, vous n'avez pas?
- avez-vous testé avec le partage de la session sur plusieurs serveurs (et si oui, avez-vous dû faire quelque chose de spécial afin de lui permettre d'associer la session de l'utilisateur stockées sur le redis avec le même utilisateur sur plusieurs serveurs?)
- vous ne comprenez pas; nous faisons limited (petit) utilisation de la notion de l'état de session, mais nous n'utiliserons pas l'ASP.NET session-modèle de l'état pour ce faire.
- Conservez-vous vos conceptuel de l'état de session (par utilisateur) dans le Redis? Ou sur le ASP.net le cache de l'Application (sur le serveur lui-même)?
- comme il arrive pas, mais c'est simplement parce que notre état de session d'utilisation de la pré-dates de nos redis utilisation, et nous n'avons pas eu besoin de la revoir. Redis ferait parfaitement sensée et raisonnable de l'état de session magasin bien mieux qu'un RDMBS, par exemple.
- Est-ce dans nuget? Je vois qu'il ya une utilisation de ss, mais j'ai comme l'utilisation de booksleve à cause de cela étant asyn
- Je pense que ce projet nécessite une mise à jour parce que certaines des méthodes de
Booksleeve
est obsolète, et les suggestions sont à l'aide deStings API
. - Pour tous ceux qui lisent ceci, il ressemble à Microsoft publie leur propre Redis fournisseur d'État de Session. Voir la prelease ici
Vous devez vous connecter pour publier un commentaire.
J'ai créé un Redis à base de
SessionStateStoreProvider
que peut être trouvé sur GitHub à l'aide deServiceStatck.Redis
que le client (plutôt que Booksleeve).Il peut être installé via NuGet avec
Install-Package Harbour.RedisSessionStateStore
.J'ai trouvé quelques bizarreries avec @NathanD de l'approche. Dans mon implémentation, les verrous sont stockées avec la valeur de session plutôt que dans une autre touche (moins d'allers-retours Redis). En outre, parce qu'il utilise
ServiceStack.Redis
, il peut utilisé des pool de connexions.Enfin, il est testé. Ce fut ma plus grande désactiver à partir @NathanD de l'approche. Il n'y a aucun moyen de fait savoir si cela a fonctionné sans courir à travers chaque cas d'utilisation manuelle.
WATCH
. J'ai fait quelques modifications. Auriez-vous l'esprit de prendre un coup d'oeil à question 1 et la code associé? Je vais les pousser à NuGet une fois que vous avez pris un coup d'oeil. Merci!Already referencing a newer version of 'ServiceStack.Text'
lors de l'installation avec nuget.Il serait non seulement utile, mais je considère fortement que vous regardez de près le Redis' Hash de type de données si vous prévoyez d'aller en bas de cette route. Dans notre application, la session est une petite collection de clés et de valeurs (c'est à dire:
{user_id: 7, default_timezone: 'America/Chicago', ...}
) avec l'ensemble de la session de l'utilisateur stockées un unique Redis hachage.Non seulement à l'aide de Hachage simplifier la cartographie des données si vos données de session est similaire, mais le Redis utilise l'espace de manière beaucoup plus efficace avec cette approche.
Notre application est en ruby, mais vous pouvez toujours trouver une certaine utilisation de ce que nous avons écrit.