Platform Administration and Architecture

Walkthrough: Configuring a private session state database using the Redis provider

Abstract

How to use Redis as your private session state store.

In private session state, all data related to a specific interaction, such as viewed pages, converted goals, triggered campaigns, or accumulated engagement points, is collected and saved to the session state database.

This walkthrough describes how to use Redis as your private session state store, using the Sitecore ASP.NET Session State Store Provider for Redis, and describes how to: Deploy a private Redis session database, configure Sitecore, configure a dedicated Redis Session Processing server, and adjust the Redis provider settings.

The Sitecore ASP.NET session state store provider for Redis enables you to use Redis as your session state store. The provider supports the SessionEnd event, which the xDB needs to track website visits.

Note

Do not make changes directly to the configuration files. Instead, you must create a patch file that performs the required changes during runtime.

To deploy a Redis session database:

  1. Choose between Azure Redis or Redis on premise. You can provision Azure Redis by using the instructions on the Microsoft Azure website or with Azure PowerShell.

  2. Go to <sitename>\Website\App_Config, open the ConnectionStrings.config file, and add the following connection string:

    <add name="session" connectionString="_host_:_port_number _" />
  3. Configure the connection string so that it points to your session database.

  4. Save your changes.

To configure Sitecore to use the private session state store provider for Redis:

  1. Go to your site root folder<sitename>\website, open the web.config file and locate the sesssionState section:

    <sessionState mode="Inproc" cookieless="false" timeout="20">
  2. Update the sessionState section to use the Redis provider instead of InProc, as shown in the following example. Also, change the name attribute value to 'redis':

    <sessionState mode="Custom" customProvider="redis" timeout="20">
        <providers>
            <add name="redis"
                type="Sitecore.SessionProvider.Redis.RedisSessionStateProvider,
                Sitecore.SessionProvider.Redis"
                connectionString="session"
                pollingInterval="2"
                applicationName="private"/>
        </providers>
    </sessionState>

The Sitecore Experience platform supports a dedicated Redis server. This means that if you have an environment using a cluster of CD servers, you can configure some of the servers to only serve content but not to process the session state data by using the pollingEnabled setting.

With the pollingEnabled setting you can enable/disable expired session processing. For example, you can enable it on the CD servers that are dedicated to expiring sessions and disabled it on the live CD servers, (that serve content to visitors).

To configure the pollingEnabled setting for a private session state:

  • Disable private sessions processing: In the web.config file set the pollingEnabled value to false for your dedicated CD servers and leave it set to true for your live servers.

         <sessionState mode="Custom" customProvider="redis" cookieless="false" timeout="1" sessionIDManagerType="Sitecore.SessionManagement.ConditionalSessionIdManager">
            ………..
          <providers>
            <add name="redis" type="Sitecore.SessionProvider.Redis.RedisSessionStateProvider, Sitecore.SessionProvider.Redis" applicationName="Application"
              connectionString="redis.sessions" pollingEnabled="false" pollingInterval="2" pollingMaxExpiredSessionsPerSecond="0" pollingMaxInstances="1"
              compression="true"/>
          </providers>
        </sessionState>
    

Use the Redis provider settings reference to configure your session state. If you have configured everything correctly, session records should appear in your Redis session database after the first web request.