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.
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
-
Fixed –
NullReferenceException
thrown from theRedisStorage.ToString
method regression. - Fixed – Show configured endpoints when “master” connection isn’t available yet.
2.6.0
-
Added –
RedisStorageOptions.MultiplexerPoolSize
option (defaults to1
) 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.
-
Fixed –
NullReferenceException
in StackExchange.Redis’ExecuteSyncImpl
method. -
Fixed – Don’t handle
OutOfMemoryException
anywhere, rethrow it instead. -
Fixed –
KeyNotFoundException
in theRemoveTimedOutServers
method appeared in version 2.5.2. -
Fixed –
StackOverflowException
when running on Mono platform in macOS.