Pergunta

Para um componente .NET que será usado em aplicativos Web e aplicativos rich client, parece haver duas opções óbvias para armazenamento em cache:System.Web.Caching ou Ent.Liv.Bloco de cache.

  • O que você usa?
  • Por que?

System.Web.Caching

É seguro usar isso fora de aplicativos da web?Já vi informações confusas, mas acho que a resposta é talvez-meio-não-realmente.

Não espero usar um de seus destaques, SqlCacheDependência, mas a adição de CacheItemUpdateCallback no .NET 3.5 parece uma coisa realmente boa.

Bloco de aplicativos de cache de biblioteca corporativa

  • outros blocos já estão em uso, então a dependência já existe
  • a persistência do cache não é necessária;regenerar o cache na reinicialização está OK

Alguns itens de cache devem estar sempre disponíveis, mas devem ser atualizados periodicamente.Para esses itens, receber um retorno de chamada depois um item foi removido não é muito conveniente.Parece que um cliente terá que apenas dormir e pesquisar até que o item de cache seja preenchido novamente.

Memcached para Win32 + Cliente .NET

Quais são os prós e os contras quando você não precisa de um distribuído esconderijo?

Foi útil?

Solução

Estes são os itens que considero para o tópico Cache:

Memcached Win32 Velocity .Net Cache Enterprise Biblioteca Bloco de Aplicativos de Cache

MemCached Win32: Até recentemente eu usei o MemCached Win32.Isso é semelhante a um web farm (muitos servidores servindo o mesmo conteúdo para alta disponibilidade), mas é um cache farm.Isso significa que você pode instalá-lo localmente em seu servidor web inicialmente se não tiver recursos para aumentar.Então, à medida que avança, você pode escalar horizontalmente (mais servidores) ou verticalmente (mais hardware).Este é um produto que foi portado do MemCached original para funcionar no Windows.Este produto tem sido amplamente utilizado em sites de tráfego muito alto. http://lineofthought.com/tools/memcached

Velocidade: Esta é a resposta da Microsoft a produtos como o MemCached.O MemCached já está disponível há algum tempo, o Velocity está no modo CTP.Devo dizer que pelo que li até agora este produto certamente vai virar minha cabeça quando for lançado.Mas não consigo executar grandes projetos de produção em um produto CTP com histórico zero.Eu comecei a brincar com ele, pois, uma vez que ele ganha impulso, o MemCached nem se compara àqueles que estão bloqueados no mundo do Windows! http://blogs.msdn.com/velocity/

Cache .NET: Não há razão para desconsiderar o cache .NET padrão.Ele está integrado e pronto para uso gratuitamente e sem necessidade de configuração (principal).Oferece flexibilidade ao oferecer mecanismos de armazenamento de itens na memória local, em um servidor de estado ÚNICO ou em um banco de dados centralizado.O Velocity entra em cena quando você precisa de mais de um servidor de estado único (cache na memória) e não deseja usar um banco de dados lento para armazenar seu cache.

Bloco de aplicativos empresariais: Eu fico longe de todos os blocos de aplicativos empresariais.São estruturas pesadas que oferecem mais do que geralmente preciso!Contanto que você se lembre de agrupar tudo que diz respeito ao código que não é seu e siga regras simples de codificação, siga qualquer um dos outros métodos acima deste!(apenas minha opinião, é claro - o MySpace aproveita o máximo que pode dos Enterprise Application Blocks!)

Você não precisa escolher antecipadamente! Geralmente crio um wrapper de cache com o qual me comunico em meu código para métodos como Get, Set, Exists, Remove, ListKeys, etc.Isso então aponta para um nível subjacente de abstração de cache que pode apontar para cache MemCached, Velocity ou .NET.Eu uso o StructureMap (ou escolho outro contêiner IoC) para injetar qual forma de cache desejo usar para um determinado ambiente.Na minha caixa de desenvolvimento local, posso usar o cache .NET na sessão.Na produção eu geralmente uso o MemCached Win 32.Mas, independentemente de como ele esteja configurado, você pode facilmente trocar as coisas para experimentar cada sistema e ver o que funciona melhor para você.Você só precisa ter certeza de que seu aplicativo sabe o mínimo possível sobre como as coisas são armazenadas em cache!Depois que essa camada de abstração estiver implementada, você poderá fazer coisas como executar um algoritmo de compactação (gzip) para todos os dados que entram e saem do cache, o que permitiria armazenar 10 vezes a quantidade de dados no cache.- transparentemente.

Abordo .NET Cache, MemCached Win32, StructureMap e as abstrações apropriadas em meu livro, se você estiver interessado!

Redes sociais ASP.NET 3.5 (http://www.amazon.com/ASP-NET-3-5-Social-Networking-Enterprise-ready/dp/1847194788/ref=sr_1_1?ie=UTF8&s=books&qid=1225408005&sr=8-1 ) Andrew Siemer www.andrewsiemer.com blog.andrewsiemer.com www.socialnetworkingin.net

AtualizarAlterado o link que lista sites que usam memcached.Obrigado David por perceber que estava quebrado!

Outras dicas

Tenha em mente que a documentação do EntLib orienta você especificamente para o cache do ASP.NET para aplicativos ASP.NET.Essa é provavelmente a recomendação mais forte para usá-lo aqui.Além disso, o cache EntLib não possui dependências, o que para mim é um grande motivo para não usá-lo.

Não acho que haja uma limitação técnica no envio do System.Web como parte do seu aplicativo, embora seja um pouco estranho que eles tenham colocado esse aviso na página do .NET 3.5.Na verdade, Hanselman diz que começou a ficar assustado com essa ideia, mas ficou convencido.Além disso, se você ler os comentários, ele diz que o bloco tem muitas partes móveis e o cache do ASP.NET é muito mais leve.
Acho que esse é exatamente o tipo de problema que Velocidade vai resolver, mas isso é apenas uma prévia por enquanto :-(

Eu diria que use o Web.Caching e veja como você se sai.Se você colocar algum tipo de camada de abstração sobre ela, sempre terá a opção de trocá-la pelo bloco EntLib mais tarde, se encontrar problemas.

Dê uma olhada memcached.É um sistema de cache distribuído muito legal, rápido e leve.Existem APIs para várias das linguagens mais populares, incluindo C#.Pode não funcionar bem no lado do cliente (a menos, é claro, que o cliente esteja obtendo os dados armazenados em cache de algum tipo de servidor), mas se você abstrair seu uso do memcached para uma interface específica, poderá implementar a interface com outro cache sistema.

@Davide Vosti

"Se eles colocam no espaço para nome da web, acho que é por um bom motivo". Essa mesma lógica se aplica ao tempo de execução de simultaneidade e coordenação (CCR) no estúdio robótico?não?não pensei assim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top