Comment cache de tables de base de données afin de prévenir de nombreuses requêtes de base de données dans Asp.net C# mvc
- Je créer mon propre cms à l'aide de Asp.net mvc 4 (c#), et je veux mettre en cache certaines données de base de données, aime: la localisation, les catégories de recherche (c'est à longue queue, chaque catégorie de sous et de sous-sous-catégories), etc..
Il exagéré pour interroger la base de données de tous les temps, car il peut être plus que de 30 à 100 requêtes pour chaque demande de page, cependant, les utilisateurs de la mise à jour de ceux de la base de données rarement
Alors, quelle est la meilleure façon de performance (performance et de commodité) de le faire?
Je sais comment utiliser le OutputCache de l'action, mais ce n'est pas ce dont j'ai besoin dans cette situation , il cache le html, mais ce dont j'ai besoin c'est, par exemple, que mon propre helper @html.Localization("Newsletter.Tite")
prendra la valeur de la langue, ou de tout autre programme d'assistance que d'interagir avec les données, etc.
Je pense (pas vraiment sûr) que j'ai besoin de mettre en cache les données que je veux, que lorsque la demande est invoquer pour la première fois, et ensuite travailler avec l'emplacement de la cache, mais je n'ai aucune expérience, même à propos d'elle.
- De quoi êtes-vous en train de faire et pourquoi il ne fonctionne pas?
- Romoku, je fais simple en c# des requêtes linq pour la databse, et c'est exagéré, car il y a beaucoup de demandes pour chaque demande de page
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le haut-
MemoryCache
pour stocker l'ensemble des jeux de résultats que vous avez récupéré à partir de la base de données.Un modèle typique:
Cache
etMemoryCache classes
est que vous pouvez créer plusieurs instances de laMemoryCache class
pour une utilisation dans la même application et la mêmeAppDomain
exemple.new MemoryCache("my_region1")
,new MemoryCache("my_region2")
, ...J'ai du cache de base de données commune, des données comme les données qui ont été affichés dans les menus déroulants. J'ai utilisé
MemoryCache
. Et j'ai utiliséEntity Framework code first
etAutofac
pour l'injection de dépendances.Ici une partie de ce que j'ai fait dans ma solution, peut ne pas fonctionner pour vous, mais il a travaillé pour moi, pas parfait, mais, mais a besoin de beaucoup de nettoyage à faire.
Mon
ICacheManager
interface:Mon
CacheManager
classe:Une classe d'extension pour ma mise en cache:
Et ce est la façon dont je voudrais l'utiliser dans ma classe de référentiel. Cette méthode renvoie une liste de toutes mes banques qui s'affiche dans une liste déroulante.
J'espère que cette aide. C'est un très simple de mise en œuvre, mais cela fonctionne pour moi. Il existe de nombreux articles en ligne sur la façon d'utiliser une stratégie de mise en cache
ASP.NET MVC
. JusteGoogle
il.CacheManager
, veuillez vérifier leur source et ceci post , espoir aide.Il y a plusieurs choses à considérer ici avant de choisir votre mise en œuvre de la mise en cache, mais l'une des principales choses que vous devez décider est de savoir à quel point voulez-vous le cache afin de se produire à l'accès aux données, le modèle de la création ou de la génération de l'INTERFACE utilisateur? L'un ou l'ensemble de ces lieux?
Vous avez plusieurs options, mais pour les données générales de mise en cache, vous pouvez utiliser le
System.Moment de l'exécution.La mise en cache.MemoryCache
, ou pour quelque chose de beaucoup plus souple et enrichissante, vous pouvez regarder une mise en œuvre à l'aide de NoSQL comme Redis.Vous pouvez utiliser
MemoryCache
pour la mise en cache des données, mais l'utilisation de Redis pour la mise en cache des agrégats qui composent les modèles de vue. Si vous êtes allé avec le Redis, vous pouvez bien sûr répondre à tous vos mise en cache à l'aide de ce. L'avantage étant que toutes vos données deviennent persistants au redémarrage de l'application. L'inconvénient étant qu'il devient une exigence supplémentaire pour l'exécution de votre CMS.D'autres choses à prendre en sont la cohérence (à l'aide de certains Cio de l'aide) et permettant aux données d'être annulé une fois les mises à jour. Par conséquent, disposer d'un moyen de mise à jour du cache.
En ce qui concerne la meilleur approche, dans votre cas, si vous créez une nouvelle application de gestion des cas, commencer petit/simple et de construire dans les étapes. Vous ne pouvez pas obtenir la perfection première fois, mais tant que vous êtes cohérent et clair dans votre démarche, il devrait être facile à construire sur ce que vous avez fait ou d'échanger et d'essayer quelque chose de différent/mieux.