Provedor de estado de sessão ASP.NET para Cache Redis do AzureASP.NET Session State Provider for Azure Redis Cache

O Cache Redis do Azure fornece um provedor de estado da sessão que você pode usar para armazenar seu estado de sessão na memória com o Redis Caches ao invés de um banco de dados SQL Server.Azure Redis Cache provides a session state provider that you can use to store your session state in-memory with Redis Cache instead of a SQL Server database. Para usar o provedor de estado de sessão de cache, primeiro configure o cache e, em seguida, configure seu aplicativo ASP.NET para o cache usando o pacote NuGet de Estado de Sessão do Cache Redis.To use the caching session state provider, first configure your cache, and then configure your ASP.NET application for cache using the Redis Cache Session State NuGet package.

Geralmente, não é prático em uma aplicativo em nuvem real evitar o armazenamento de alguma forma de estado para uma sessão de usuário, mas algumas abordagens afetam o desempenho e a escalabilidade mais do que outras.It's often not practical in a real-world cloud app to avoid storing some form of state for a user session, but some approaches impact performance and scalability more than others. Se você precisar armazenar o estado, a melhor solução será manter o estado em uma quantidade pequena e armazená-lo em cookies.If you have to store state, the best solution is to keep the amount of state small and store it in cookies. Se isso não for viável, a próxima solução mais adequada será usar o estado de sessão ASP.NET com um provedor para cache distribuído na memória.If that isn't feasible, the next best solution is to use ASP.NET session state with a provider for distributed, in-memory cache. A pior solução de um ponto de vista de escalabilidade e desempenho é usar um provedor de estado de sessão com backup em um banco de dados.The worst solution from a performance and scalability standpoint is to use a database backed session state provider. Este tópico fornece diretrizes sobre como usar o Provedor de Estado de Sessão ASP.NET para o Cache Redis do Azure.This topic provides guidance on using the ASP.NET Session State Provider for Azure Redis Cache. Para saber mais sobre outras opções de estado de sessão, consulte Opções de estado da sessão ASP.NET.For information on other session state options, see ASP.NET Session State options.

Armazenar o estado da sessão ASP.NET no cacheStore ASP.NET session state in the cache

Para configurar um aplicativo cliente no Visual Studio usando o pacote NuGet do Estado de Sessão do Cache Redis, clique em Gerenciador de Pacotes NuGet e Console do Gerenciador de Pacotes no menu Ferramentas.To configure a client application in Visual Studio using the Redis Cache Session State NuGet package, click NuGet Package Manager, Package Manager Console from the Tools menu.

Execute o comando a seguir na janela Package Manager Console.Run the following command from the Package Manager Console window.

Install-Package Microsoft.Web.RedisSessionStateProvider

Importante

Se você estiver usando o recurso de cluster a partir da camada premium, use RedisSessionStateProvider 2.0.1 ou superior, caso contrário uma exceção será emitida.If you are using the clustering feature from the premium tier, you must use RedisSessionStateProvider 2.0.1 or higher or an exception is thrown. Mudar para 2.0.1 ou superior é uma alteração significativa; para saber mais, confira v2.0.0 Breaking Change Details.Moving to 2.0.1 or higher is a breaking change; for more information, see v2.0.0 Breaking Change Details. No momento da atualização deste artigo, a versão atual deste pacote é 2.2.3.At the time of this article update, the current version of this package is 2.2.3.

O pacote NuGet do Provedor de estado de sessão Redis tem uma dependência do pacote StackExchange.Redis.StrongName.The Redis Session State Provider NuGet package has a dependency on the StackExchange.Redis.StrongName package. Se o pacote StackExchange.Redis.StrongName não estiver presente em seu projeto, ele será instalado.If the StackExchange.Redis.StrongName package is not present in your project, it is installed.

Observação

Além do pacote StackExchange.Redis.StrongName de nome forte, também há a versão do StackExchange.Redis sem nome forte.In addition to the strong-named StackExchange.Redis.StrongName package, there is also the StackExchange.Redis non-strong-named version. Se o seu projeto estiver usando a versão StackExchange.Redis sem nome forte, será necessário desinstalá-la, caso contrário, você terá conflitos de nomenclatura em seu projeto.If your project is using the non-strong-named StackExchange.Redis version you must uninstall it, otherwise you get naming conflicts in your project. Para saber mais sobre esses pacotes, consulte Configurar clientes de cache .NET.For more information about these packages, see Configure .NET cache clients.

O pacote do NuGet baixa e adiciona as referências de assembly necessárias e adiciona a seção a seguir ao seu arquivo web.config.The NuGet package downloads and adds the required assembly references and adds the following section into your web.config file. Esta seção contém a configuração necessária para seu aplicativo ASP.NET usar o Provedor de Estado de Sessão do Cache Redis.This section contains the required configuration for your ASP.NET application to use the Redis Cache Session State Provider.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
    <!--
    <add name="MySessionStateStore"
           host = "127.0.0.1" [String]
        port = "" [number]
        accessKey = "" [String]
        ssl = "false" [true|false]
        throwOnError = "true" [true|false]
        retryTimeoutInMilliseconds = "0" [number]
        databaseId = "0" [number]
        applicationName = "" [String]
        connectionTimeoutInMilliseconds = "5000" [number]
        operationTimeoutInMilliseconds = "5000" [number]
    />
    -->
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" accessKey="" ssl="false"/>
    </providers>
</sessionState>

A seção comentada fornece um exemplo dos atributos e as configurações de exemplos de cada atributo.The commented section provides an example of the attributes and sample settings for each attribute.

Configure os atributos usando os valores da sua folha de cache no Portal do Microsoft Azure e defina os demais valores conforme sua preferência.Configure the attributes with the values from your cache blade in the Microsoft Azure portal, and configure the other values as desired. Para obter instruções sobre como acessar as propriedades do cache, consulte Definir configurações de cache Redis.For instructions on accessing your cache properties, see Configure Redis cache settings.

  • host – especifique o ponto de extremidade do seu cache.host – specify your cache endpoint.
  • porta – use sua porta SSL ou não SSL, dependendo das configurações de SSL.port – use either your non-SSL port or your SSL port, depending on the ssl settings.
  • accessKey – use a chave primária ou secundária do seu cache.accessKey – use either the primary or secondary key for your cache.
  • ssl – true, se você quiser proteger as comunicações de cache/cliente com SSL; caso contrário, false. Não esqueça de especificar a porta correta.ssl – true if you want to secure cache/client communications with ssl; otherwise false. Especifique a porta correta.Be sure to specify the correct port.
    • A porta não SSL é desabilitada por padrão para novos caches.The non-SSL port is disabled by default for new caches. Escolha true nessa configuração para usar a porta SSL.Specify true for this setting to use the SSL port. Para mais informações sobre como habilitar a porta não SSL, confira a seção Portas de acesso do tópico Como configurar um cache.For more information about enabling the non-SSL port, see the Access Ports section in the Configure a cache topic.
  • throwOnError – true se você quiser que uma exceção seja lançada em caso de falha, ou false se quiser que a operação falhe silenciosamente.throwOnError – true if you want an exception to be thrown if there is a failure, or false if you want the operation to fail silently. Você pode verificar a existência de uma falha na propriedade estática Microsoft.Web.Redis.RedisSessionStateProvider.LastException.You can check for a failure by checking the static Microsoft.Web.Redis.RedisSessionStateProvider.LastException property. O padrão é true.The default is true.
  • retryTimeoutInMilliseconds – as operações que apresentam falhas recebem uma nova tentativa durante esse intervalo, especificado em milissegundos.retryTimeoutInMilliseconds – Operations that fail are retried during this interval, specified in milliseconds. A primeira nova tentativa ocorre após 20 milissegundos e outras novas tentativas ocorrem a cada segundo até que o intervalo de retryTimeoutInMilliseconds expire.The first retry occurs after 20 milliseconds, and then retries occur every second until the retryTimeoutInMilliseconds interval expires. Imediatamente após esse intervalo, a operação será repetida uma última vez.Immediately after this interval, the operation is retried one final time. Se a operação ainda falhar, a exceção será lançada de volta ao chamador, dependendo da configuração de throwOnError.If the operation still fails, the exception is thrown back to the caller, depending on the throwOnError setting. O valor padrão é 0, que significa nenhuma tentativa nova.The default value is 0, which means no retries.
  • databaseId – especifica qual banco de dados usar para os dados de saída do cache.databaseId – Specifies which database to use for cache output data. Se esse campo não for especificado, o valor padrão 0 será usado.If not specified, the default value of 0 is used.
  • applicationName – As chaves são armazenadas em redis como {<Application Name>_<Session ID>}_Data.applicationName – Keys are stored in redis as {<Application Name>_<Session ID>}_Data. Esse esquema de nomenclatura permite que vários aplicativos compartilhem a mesma instância do Redis.This naming scheme enables multiple applications to share the same Redis instance. Esse parâmetro é opcional e, se você não fornecê-lo, um valor padrão será usado.This parameter is optional and if you do not provide it a default value is used.
  • connectionTimeoutInMilliseconds – essa configuração permite a substituição da configuração syncTimeout no cliente StackExchange.Redis.connectionTimeoutInMilliseconds – This setting allows you to override the connectTimeout setting in the StackExchange.Redis client. Se ela não for especificada, a configuração padrão do syncTimeout, 1000, será usada.If not specified, the default connectTimeout setting of 5000 is used. Para saber mais, consulte Modelo de configuração StackExchange.Redis.For more information, see StackExchange.Redis configuration model.
  • operationTimeoutInMilliseconds – essa configuração permite a substituição da configuração de syncTimeout no cliente StackExchange.Redis.operationTimeoutInMilliseconds – This setting allows you to override the syncTimeout setting in the StackExchange.Redis client. Se ela não for especificada, a configuração padrão de syncTimeout, 1000, será usada.If not specified, the default syncTimeout setting of 1000 is used. Para saber mais, consulte Modelo de configuração StackExchange.Redis.For more information, see StackExchange.Redis configuration model.

Para saber mais sobre essas propriedades, consulte o anúncio original da postagem do blog em Anunciando o Provedor de estado de sessão ASP.NET para Redis.For more information about these properties, see the original blog post announcement at Announcing ASP.NET Session State Provider for Redis.

Não se esqueça de comentar a seção do provedor de estado de sessão InProc padrão em seu Web.config.Don’t forget to comment out the standard InProc session state provider section in your web.config.

<!-- <sessionState mode="InProc"
     customProvider="DefaultSessionProvider">
     <providers>
        <add name="DefaultSessionProvider"
              type="System.Web.Providers.DefaultSessionStateProvider,
                    System.Web.Providers, Version=1.0.0.0, Culture=neutral,
                    PublicKeyToken=31bf3856ad364e35"
              connectionStringName="DefaultConnection" />
      </providers>
</sessionState> -->

Após a execução dessas etapas, seu aplicativo será configurado para usar o Provedor de estado de sessão de cache Redis.Once these steps are performed, your application is configured to use the Redis Cache Session State Provider. Quando você usa o estado de sessão em seu aplicativo, ele é armazenado em uma instância do Cache Redis do Azure.When you use session state in your application, it is stored in an Azure Redis Cache instance.

Importante

Os dados armazenados em cache devem ser serializáveis, ao contrário dos dados que podem ser armazenados no Provedor de estado de sessão padrão do ASP.NET na memória.Data stored in the cache must be serializable, unlike the data that can be stored in the default in-memory ASP.NET Session State Provider. Quando o Provedor de estado de sessão para Redis for usado, certifique-se de que os tipos de dados que estão sendo armazenados no estado de sessão sejam serializáveis.When the Session State Provider for Redis is used, be sure that the data types that are being stored in session state are serializable.

Opções de estado da sessão ASP.NETASP.NET Session State options

  • Provedor de estado de sessão na memória - Esse provedor armazena o Estado da sessão na memória.In Memory Session State Provider - This provider stores the Session State in memory. A vantagem de usar esse provedor é que ele é simples e rápido.The benefit of using this provider is it is simple and fast. No entanto, não é possível dimensionar seus Aplicativos Web se você estiver usando o provedor na memória, pois ele não é distribuído.However you cannot scale your Web Apps if you are using in memory provider since it is not distributed.
  • Provedor de estado de sessão do SQL Server - Esse provedor armazena o Estado da sessão no SQL Server.Sql Server Session State Provider - This provider stores the Session State in Sql Server. Use esse provedor se quiser armazenar o estado da Sessão em um armazenamento persistente.Use this provider if you want to store the Session state in persistent storage. Você pode dimensionar seu Aplicativo Web, mas o uso do Sql Server para sessão afeta o desempenho de seu Aplicativo Web.You can scale your Web App but using Sql Server for Session has a performance impact on your Web App. Você também pode usar este provedor com uma Configuração de OLTP na memória para ajudar a melhorar o desempenho.You can also use this provider with an In-Memory OLTP configuration to help improve performance.
  • Provedor de estado de sessão distribuído na memória, como o Provedor de estado de sessão de cache Redis - Esse provedor oferece o melhor dos dois mundos.Distributed In Memory Session State Provider such as Redis Cache Session State Provider - This provider gives you the best of both worlds. Seu Aplicativo Web pode ter um Provedor de estado de sessão simples, rápido e escalonável.Your Web App can have a simple, fast, and scalable Session State Provider. Como esse provedor armazena o Estado da sessão em um Cache, seu aplicativo precisa levar em consideração todas as características associadas ao conversar com um Cache distribuído na memória, por exemplo, falhas de rede temporárias.Because this provider stores the Session state in a Cache, your app has to take in consideration all the characteristics associated when talking to a Distributed In Memory Cache, such as transient network failures. Para conhecer as práticas recomendadas sobre o uso do Cache, consulte Orientação sobre cache da Microsoft Patterns & Practices Orientação sobre design e implementação de aplicativo na nuvem do Azure.For best practices on using Cache, see Caching guidance from Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.

Para saber mais sobre o estado da sessão e outras práticas recomendadas, consulte Práticas recomendadas para o desenvolvimento na Web (Criando aplicativos de nuvem reais com o Azure).For more information about session state and other best practices, see Web Development Best Practices (Building Real-World Cloud Apps with Azure).

Próximas etapasNext steps

Confira o Provedor de cache de saída ASP.NET para o Cache Redis do AzureCheck out the ASP.NET Output Cache Provider for Azure Redis Cache.