/// <summary>
        /// Determines if all the bits are set in the bloom filter.
        /// </summary>
        /// <param name="key">
        /// The key.
        /// </param>
        /// <param name="bits">
        /// The bits.
        /// </param>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        private static bool AllBitsSet(string key, RedisValue[] bits)
        {
            RedisKey[] keyArgs = { key };
            RedisValue[] valueArgs = new RedisValue[bits.Length];
            bits.CopyTo(valueArgs, 0);

            RedisResult result = SharedCache.Instance.GetWriteConnection(key)
                .GetDatabase(SharedCache.Instance.Db)
                .ScriptEvaluate(BloomFilter.AllBitsSetHash, keyArgs, valueArgs);

            return null != result && !result.IsNull && 1L == (long)result;
        }
        /// <summary>
        /// Determines if all the bits are set in the bloom filter.
        /// </summary>
        /// <param name="key">
        /// The key.
        /// </param>
        /// <param name="bits">
        /// The bits.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        private static async Task<bool> AllBitsSetAsync(string key, RedisValue[] bits)
        {
            RedisKey[] keyArgs = { key };
            RedisValue[] valueArgs = new RedisValue[bits.Length];
            bits.CopyTo(valueArgs, 0);

            Task<RedisResult> result = SharedCache.Instance.GetWriteConnection(key)
                .GetDatabase(SharedCache.Instance.Db)
                .ScriptEvaluateAsync(BloomFilter.AllBitsSetHash, keyArgs, valueArgs);

            if (null == result)
            {
                return false;
            }

            RedisResult value = await result;
            return !value.IsNull && 1L == (long)value;
        }
        /// <summary>
        /// Sets bits in the bloom filter.
        /// </summary>
        /// <param name="key">
        /// The key.
        /// </param>
        /// <param name="bits">
        /// The bits.
        /// </param>
        /// <param name="value">
        /// The value.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        private static Task SetBitsAsync(string key, RedisValue[] bits, bool value)
        {
            RedisKey[] keyArgs = { key };
            RedisValue[] valueArgs = new RedisValue[bits.Length + 1];
            valueArgs[0] = value;
            bits.CopyTo(valueArgs, 1);

            return SharedCache.Instance.GetWriteConnection(key)
                .GetDatabase(SharedCache.Instance.Db)
                .ScriptEvaluateAsync(BloomFilter.SetMultipleBitsHash, keyArgs, valueArgs);
        }