The new version brings a lot of improvements to the internal implementation of Hangfire.Pro.Redis itself and its underlying Redis client – ability to use multiple connections within the same storage, improved request/response processing pipeline, TLS 1.2 enabled by default for encrypted connections and other improvements and fixes.

Upgrade to this version or add sslprotocols=tls12 to your connection string before Mar 31, 2020 if you are using Azure Cache for Redis and .NET Framework 4.5.2 or earlier to avoid connectivity issues, please see Remove TLS 1.0 and 1.1 from use with Azure Cache for Redis for details.

Now it’s possible to have multiple multiplexed connections in the same storage to improve throughput when talking with Redis in crowded environments like the cloud ones without introducing new processing servers with dedicated storage instances. By default there will be a single multiplexed connection, but their number can be configured as shown below.

GlobalConfiguration.Configuration.UseRedisStorage(
    "redis.server:6379",
    new RedisStorageOptions
    {
        MultiplexerPoolSize = 2
    });

Unfortunately there’s no method to determine which value suits our needs best, so it should be chosen empirically based on observed behavior. So it’s better to start with the default value and increase it step-by-step and control the result. If the new value does not increase the throughput or make TimeoutException happen more rarely and leads to the opposite effect, then it’s time to stop.

Release Notes

2.6.1

  • FixedNullReferenceException thrown from the RedisStorage.ToString method regression.
  • Fixed – Show configured endpoints when “master” connection isn’t available yet.

2.6.0

  • AddedRedisStorageOptions.MultiplexerPoolSize option (defaults to 1) to use multiple connections.
  • Changed – TLS 1.2 is now used by default on all the platforms for encrypted connections.
  • Changed – Improved request scheduling logic to decrease latency for simple commands.
  • Changed – Change “localhost” to “127.0.0.1” for the default Redis endpoint to work better on macOS.
  • Changed – Use FireAndForget flag for unlock and ack/requeue commands to reduce sync waiting.
  • Changed – Wake up idle workers one-by-one when their queues become non-empty.
  • Changed – Simplify response reader’s implementation to avoid using locks and thread pool.
  • Changed – Use AboveNormal priority for threads which responsible for creating multiplexers.
  • Fixed – Don’t wait for the connection to be established in the storage constructor.
  • Fixed – Reconnection logic is now also listening for internal StackExchange.Redis errors.
  • FixedNullReferenceException in StackExchange.Redis’ ExecuteSyncImpl method.
  • Fixed – Don’t handle OutOfMemoryException anywhere, rethrow it instead.
  • FixedKeyNotFoundException in the RemoveTimedOutServers method appeared in version 2.5.2.
  • FixedStackOverflowException when running on Mono platform in macOS.

Subscribe to monthly updates

Subscribe to receive monthly blog updates. Very low traffic, you are able to unsubscribe at any time.

Comments