/// <summary>
        /// 设置键值。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">键名。</param>
        /// <param name="value">键值。</param>
        /// <param name="expiration">生存时间。</param>
        /// <param name="timeUnit">定位生存时间的单位。</param>
        /// <param name="behavior">定位键的行为。</param>
        /// <returns>设置成功返回 true,否则返回 false。</returns>
        public static bool Set(this IRedisClient client, string key, BinaryValue value
                               , long?expiration = null
                               , RedisExpireTimeUnit timeUnit = RedisExpireTimeUnit.EX
                               , RedisKeyBehavior behavior    = RedisKeyBehavior.None)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentNullException("key");
            }

            List <object> args = new List <object>(5);

            args.Add(key);
            args.Add(value);
            if (expiration.HasValue && expiration.Value > 0)
            {
                args.Add(timeUnit == RedisExpireTimeUnit.EX ? "EX" : "PX");
                args.Add(expiration.Value);
            }

            if (behavior != RedisKeyBehavior.None)
            {
                args.Add(behavior == RedisKeyBehavior.NX ? "NX" : "XX");
            }

            return(client.Execute(new RedisStatus.MultiBulk("SET", args.ToArray())));
        }
        /// <summary>
        /// 设置键值。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">键名。</param>
        /// <param name="value">键值。</param>
        /// <param name="expiration">生存时间。</param>
        /// <param name="timeUnit">定位生存时间的单位。</param>
        /// <param name="behavior">定位键的行为。</param>
        /// <returns>设置成功返回 true,否则返回 false。</returns>
        public static bool Set(this IRedisClient client, string key, BinaryValue value
                               , TimeSpan?expiration          = null
                               , RedisExpireTimeUnit timeUnit = RedisExpireTimeUnit.EX
                               , RedisKeyBehavior behavior    = RedisKeyBehavior.None)
        {
            long?expiration_64 = null;

            if (expiration.HasValue)
            {
                expiration_64 = expiration.Value.GetExpiration(timeUnit);
            }

            return(Set(client, key, value, expiration_64, timeUnit, behavior));
        }
        /// <summary>
        /// 设置键值。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">键名。</param>
        /// <param name="value">键值。</param>
        /// <param name="expiration">生存时间。</param>
        /// <param name="timeUnit">定位生存时间的单位。</param>
        /// <param name="behavior">定位键的行为。</param>
        /// <returns>设置成功返回 true,否则返回 false。</returns>
        public static bool Set(this IRedisClient client, string key, BinaryValue value
            , long? expiration = null
            , RedisExpireTimeUnit timeUnit = RedisExpireTimeUnit.EX
            , RedisKeyBehavior behavior = RedisKeyBehavior.None)
        {
            if(client == null) throw new ArgumentNullException(nameof(client));
            if(string.IsNullOrWhiteSpace(key)) throw new ArgumentNullException(nameof(key));

            List<object> args = new List<object>(5);
            args.Add(key);
            args.Add(value);
            if(expiration.HasValue && expiration.Value > 0)
            {
                args.Add(timeUnit == RedisExpireTimeUnit.EX ? "EX" : "PX");
                args.Add(expiration.Value);
            }

            if(behavior != RedisKeyBehavior.None) args.Add(behavior == RedisKeyBehavior.NX ? "NX" : "XX");

            return client.Execute(new RedisStatus.MultiBulk("SET", args.ToArray()));
        }
        /// <summary>
        /// 设置键值。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">键名。</param>
        /// <param name="value">键值。</param>
        /// <param name="expiration">生存时间。</param>
        /// <param name="timeUnit">定位生存时间的单位。</param>
        /// <param name="behavior">定位键的行为。</param>
        /// <returns>设置成功返回 true,否则返回 false。</returns>
        public static bool Set(this IRedisClient client, string key, BinaryValue value
            , TimeSpan? expiration = null
            , RedisExpireTimeUnit timeUnit = RedisExpireTimeUnit.EX
            , RedisKeyBehavior behavior = RedisKeyBehavior.None)
        {
            long? expiration_64 = null;
            if(expiration.HasValue) expiration_64 = expiration.Value.GetExpiration(timeUnit);

            return Set(client, key, value, expiration_64, timeUnit, behavior);
        }