예제 #1
0
        public void DecimalTest()
        {
            Decimal     value = 5M;
            BinaryValue bv    = value;

            Assert.Equal(value, (Decimal)bv);
        }
예제 #2
0
        /// <summary>
        /// 同时设置哈希表 <paramref name="key"/> 中一个或多个域值。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">键名</param>
        /// <param name="fieldValues">域值的匿名对象。</param>
        /// <returns>结果。</returns>
        public static Result HMSet(this IRedisClient client, string key, object fieldValues)
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (fieldValues == null)
            {
                throw new ArgumentNullException(nameof(fieldValues));
            }
            RedisDictionary redisDict;

            if (fieldValues is System.Collections.IDictionary)
            {
                redisDict = new RedisDictionary(fieldValues as System.Collections.IDictionary);
            }
            else
            {
                var typeMapper = TypeMapper.Create(fieldValues.GetType());
                redisDict = new RedisDictionary(typeMapper.Count);
                foreach (var propertyMapper in typeMapper.Properties)
                {
                    redisDict.Add(propertyMapper.Name, BinaryValue.Create(propertyMapper.GetValue(fieldValues, false), propertyMapper.Property));
                }
            }
            return(HMSet(client, key, redisDict));
        }
예제 #3
0
        /// <summary>
        /// 返回给定的有序集合键 <paramref name="key"/> 中,值介于 <paramref name="min"/> 和 <paramref name="max"/> 之间从低到高的顺序的成员。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">有序集的键名</param>
        /// <param name="min">最小成员值。可以为 null 值,表示负无限。</param>
        /// <param name="max">最大成员值。可以为 null 值,表示正无限。</param>
        /// <param name="exclusiveMin">指示最小是否为开区间(true 时表示不含最小值)。</param>
        /// <param name="exclusiveMax">指示最大值是否为开区间(true 时表示不含最大值)。</param>
        /// <param name="offset">返回结果的偏移量。</param>
        /// <param name="count">返回结果的数量。</param>
        /// <returns>返回一个从低到高的顺序列表,列表里面包含了有序集合在指定范围内的成员。</returns>
        public static BinaryValue[] ZRangeByLex(this IRedisClient client, string key
                                                , BinaryValue min, BinaryValue max
                                                , bool exclusiveMin = false, bool exclusiveMax = false
                                                , long?offset       = null, long?count = null)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentNullException("key");
            }

            IEnumerable <object> args = new object[] { key
                                                       , RedisArgs.GetBinaryValue(min, exclusiveMin, "-")
                                                       , RedisArgs.GetBinaryValue(max, exclusiveMax, "+") };

            if (offset.HasValue && count.HasValue)
            {
                args = RedisArgs.ConcatAll(args, new[] { "LIMIT", offset.Value.ToString(), count.Value.ToString() });
            }

            return(client.Execute(RedisArray.Create(new RedisValue("ZRANGEBYLEX", args.ToArray()))));
        }
예제 #4
0
        public void GuidTest()
        {
            Guid        value = Guid.NewGuid();
            BinaryValue bv    = value;

            Assert.Equal(value, (Guid)bv);
        }
예제 #5
0
        public void StringTest()
        {
            String      value = Guid.NewGuid().ToString();
            BinaryValue bv    = value;

            Assert.Equal(value, (String)bv);
        }
예제 #6
0
        public void BooleanTest()
        {
            Boolean     value = true;
            BinaryValue bv    = value;

            Assert.Equal(value, (Boolean)bv);
        }
예제 #7
0
        public void EnumTest()
        {
            TypeCode code  = TypeCode.Int32;
            var      value = BinaryValue.Create(code);

            Assert.Equal(code, (TypeCode)value.Parse(typeof(TypeCode)));
        }
예제 #8
0
        public void BytesTest()
        {
            byte[]      value = { 1, 2, 3 };
            BinaryValue bv    = value;

            Assert.Equal(value, (byte[])bv);
        }
예제 #9
0
        public void CharTest()
        {
            Char        value = 'a';
            BinaryValue bv    = value;

            Assert.Equal(value, (Char)bv);
        }
예제 #10
0
        public void UInt32Test()
        {
            UInt32      value = UInt32.MaxValue;
            BinaryValue bv    = value;

            Assert.Equal(value, (UInt32)bv);
        }
예제 #11
0
        public void UInt64Test()
        {
            UInt64      value = UInt64.MaxValue;
            BinaryValue bv    = value;

            Assert.Equal(value, (UInt64)bv);
        }
예제 #12
0
        /// <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())));
        }
예제 #13
0
        public void DoubleTest()
        {
            Double      value = 0.5;
            BinaryValue bv    = value;

            Assert.Equal(value, (Double)bv);
        }
예제 #14
0
        public void Int16Test()
        {
            Int16       value = Int16.MaxValue;
            BinaryValue bv    = value;

            Assert.Equal(value, (Int16)bv);
        }
예제 #15
0
        public void TimeSpanTest()
        {
            TimeSpan    value = DateTime.Now - DateTime.Now.AddDays(-5);
            BinaryValue bv    = value;

            Assert.Equal(value, (TimeSpan)bv);
        }
예제 #16
0
        public void DateTimeTest()
        {
            DateTime    value = DateTime.Now;
            BinaryValue bv    = value;

            Assert.Equal(value, (DateTime)bv);
        }
예제 #17
0
 /// <summary>
 /// 将给定 <paramref name="key"/> 的值设为 <paramref name="value"/> ,并返回 key 的旧值。
 /// </summary>
 /// <param name="client">Redis 客户端。</param>
 /// <param name="key">键名。</param>
 /// <param name="value">键值。</param>
 /// <returns>当 <paramref name="key"/> 不存在时,返回 null ,否则返回 <paramref name="key"/> 的旧值。</returns>
 public static BinaryValue GetSet(this IRedisClient client, string key, BinaryValue value)
 {
     if (client == null)
     {
         throw new ArgumentNullException("client");
     }
     if (string.IsNullOrEmpty(key))
     {
         throw new ArgumentNullException("key");
     }
     return(client.Execute(new RedisValue("GETSET", key, value)));
 }
예제 #18
0
 /// <summary>
 /// 根据参数 <paramref name="count"/> 的值,移除列表中与参数 <paramref name="value"/> 相等的元素。
 /// </summary>
 /// <param name="client">Redis 客户端。</param>
 /// <param name="key">列表的键名。</param>
 /// <param name="count">移除的数量。
 /// <para>1、<paramref name="count"/> &gt; 0 : 从表头开始向表尾搜索,移除与 <paramref name="value"/> 相等的元素,数量为 <paramref name="count"/> 。</para>
 /// <para>2、<paramref name="count"/> &lt; 0 : 从表尾开始向表头搜索,移除与 <paramref name="value"/> 相等的元素,数量为 <paramref name="count"/> 的绝对值。</para>
 /// <para>3、<paramref name="count"/> = 0 : 移除表中所有与 <paramref name="value"/> 相等的值。</para>
 /// </param>
 /// <param name="value">匹配的元素值。</param>
 /// <returns>被移除元素的数量。</returns>
 public static long LRem(this IRedisClient client, string key, long count, BinaryValue value)
 {
     if (client == null)
     {
         throw new ArgumentNullException(nameof(client));
     }
     if (string.IsNullOrWhiteSpace(key))
     {
         throw new ArgumentNullException(nameof(key));
     }
     return(client.Execute(new RedisInteger("LREM", key, count, value)));
 }
예제 #19
0
 /// <summary>
 /// 动态地调整 Redis 服务器的配置。
 /// </summary>
 /// <param name="client">Redis 客户端。</param>
 /// <param name="parameter">配置参数。</param>
 /// <param name="value">参数的值。</param>
 /// <returns>结果。</returns>
 public static Result ConfigSet(this IRedisClient client, string parameter, BinaryValue value)
 {
     if (client == null)
     {
         throw new ArgumentNullException(nameof(client));
     }
     if (string.IsNullOrWhiteSpace(parameter))
     {
         throw new ArgumentNullException(nameof(parameter));
     }
     return(client.Execute(new RedisStatus("CONFIG SET", parameter, value)));
 }
예제 #20
0
        /// <summary>
        /// 判断 <paramref name="member"/> 是否集合 <paramref name="key"/> 的成员。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">集合的键名。</param>
        /// <param name="member">集合的成员。</param>
        /// <returns>存在返回 true,否则返回 false。</returns>
        public static bool SIsMember(this IRedisClient client, string key, BinaryValue member)
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException(nameof(key));
            }

            return(client.Execute(new RedisBoolean("SISMEMBER", key, member)));
        }
예제 #21
0
        /// <summary>
        /// 将列表 <paramref name="key"/> 下标为 <paramref name="index"/> 的元素的值设置为 <paramref name="value"/> 。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">列表的键名。</param>
        /// <param name="index">设置的索引。
        /// <para>当 <paramref name="index"/> 参数超出范围,或对一个空列表( <paramref name="key"/> 不存在)进行 LSET 时,返回一个错误</para>
        /// </param>
        /// <param name="value">设置的元素值。</param>
        /// <returns>结果。</returns>
        public static Result LSet(this IRedisClient client, string key, long index, BinaryValue value)
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException(nameof(key));
            }

            return(client.Execute(new RedisStatus("LSET", key, index, value)));
        }
예제 #22
0
        /// <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));
        }
예제 #23
0
        /// <summary>
        /// 返回给定的有序集合键 <paramref name="key"/> 中,值介于 <paramref name="min"/> 和 <paramref name="max"/> 之间的成员数量。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">有序集的键名</param>
        /// <param name="min">最小成员值。可以为 null 值,表示负无限。</param>
        /// <param name="max">最大成员值。可以为 null 值,表示正无限。</param>
        /// <param name="exclusiveMin">指示最小是否为开区间(true 时表示不含最小值)。</param>
        /// <param name="exclusiveMax">指示最大值是否为开区间(true 时表示不含最大值)。</param>
        /// <returns>包含了有序集合在指定范围内的成员数量。</returns>
        public static long ZLexCount(this IRedisClient client, string key
                                     , BinaryValue min, BinaryValue max
                                     , bool exclusiveMin = false, bool exclusiveMax = false)
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException(nameof(key));
            }

            return(client.Execute(new RedisInteger("ZLEXCOUNT", key
                                                   , RedisArgs.GetBinaryValue(min, exclusiveMin, "-")
                                                   , RedisArgs.GetBinaryValue(max, exclusiveMax, "+"))));
        }
예제 #24
0
        /// <summary>
        /// 将 <paramref name="value"/> 追加到 <paramref name="key"/> 原来的值的末尾。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">键名。</param>
        /// <param name="value">键值。</param>
        /// <returns>返回追加 <paramref name="value"/> 之后,<paramref name="key"/> 中的总字节长度。</returns>
        public static long Append(this IRedisClient client, string key, BinaryValue value)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentNullException("key");
            }
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            return(client.Execute(new RedisInteger("APPEND", key, value)));
        }
예제 #25
0
        /// <summary>
        /// 返回有序集 <paramref name="key"/> 中,成员 <paramref name="member"/> 的权重值。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">有序集的键名。</param>
        /// <param name="member">有序集的成员。</param>
        /// <returns>如果 <paramref name="member"/> 是有序集 <paramref name="key"/> 的成员,返回 <paramref name="member"/> 的权重值。否则返回 null 值。</returns>
        public static double?ZScore(this IRedisClient client, string key, BinaryValue member)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentNullException("key");
            }
            if (member == null)
            {
                throw new ArgumentNullException("member");
            }

            return(client.Execute(new RedisFloat.Nullable("ZSCORE", key, member)));
        }
예제 #26
0
        /// <summary>
        /// 返回有序集 <paramref name="key"/> 中成员 <paramref name="member"/> 的排名。其中有序集成员按权重值递减(从大到小)顺序排列。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">有序集的键名。</param>
        /// <param name="member">有序集的成员。</param>
        /// <returns>如果 <paramref name="member"/> 是有序集 <paramref name="key"/> 的成员,返回 <paramref name="member"/> 的排名。否则返回 null 值。</returns>
        public static long?ZRevRank(this IRedisClient client, string key, BinaryValue member)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentNullException("key");
            }
            if (member == null)
            {
                throw new ArgumentNullException("member");
            }

            return(client.Execute(new RedisInteger.Nullable("ZREVRANK", key, member)));
        }
예제 #27
0
        /// <summary>
        /// 移除给定的有序集合键 <paramref name="key"/> 中,值介于 <paramref name="min"/> 和 <paramref name="max"/> 之间的成员。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">有序集的键名</param>
        /// <param name="min">最小成员值。可以为 null 值,表示负无限。</param>
        /// <param name="max">最大成员值。可以为 null 值,表示正无限。</param>
        /// <param name="exclusiveMin">指示最小是否为开区间(true 时表示不含最小值)。</param>
        /// <param name="exclusiveMax">指示最大值是否为开区间(true 时表示不含最大值)。</param>
        /// <returns>返回被移除的成员数量。</returns>
        public static long ZRemRangeByLex(this IRedisClient client, string key
                                          , BinaryValue min, BinaryValue max
                                          , bool exclusiveMin = false, bool exclusiveMax = false)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentNullException("key");
            }

            return(client.Execute(new RedisInteger("ZREMRANGEBYLEX", key
                                                   , RedisArgs.GetBinaryValue(min, exclusiveMin, "-")
                                                   , RedisArgs.GetBinaryValue(max, exclusiveMax, "+"))));
        }
예제 #28
0
        /// <summary>
        /// 返回有序集 <paramref name="key"/> 中成员 <paramref name="member"/> 的排名。其中有序集成员按权重值递增(从小到大)顺序排列。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="key">有序集的键名。</param>
        /// <param name="member">有序集的成员。</param>
        /// <returns>如果 <paramref name="member"/> 是有序集 <paramref name="key"/> 的成员,返回 <paramref name="member"/> 的排名。否则返回 null 值。</returns>
        public static long?ZRank(this IRedisClient client, string key, BinaryValue member)
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException(nameof(key));
            }
            if (member == null)
            {
                throw new ArgumentNullException(nameof(member));
            }

            return(client.Execute(new RedisInteger.Nullable("ZRANK", key, member)));
        }
예제 #29
0
 /// <summary>
 /// 设置设置哈希表 <paramref name="key"/> 中一个域值。
 /// </summary>
 /// <param name="client">Redis 客户端。</param>
 /// <param name="key">哈希表的键名。</param>
 /// <param name="field">键的域。</param>
 /// <param name="value">域的值。</param>
 /// <param name="nx">为 true 表示仅当域 <paramref name="field"/> 不存在时设置。</param>
 /// <returns>设置成功返回 true,否则返回 false。</returns>
 public static bool HSet(this IRedisClient client, string key, string field, BinaryValue value, bool nx = false)
 {
     if (client == null)
     {
         throw new ArgumentNullException(nameof(client));
     }
     if (string.IsNullOrWhiteSpace(key))
     {
         throw new ArgumentNullException(nameof(key));
     }
     if (nx)
     {
         return(client.Execute(new RedisBoolean("HSETNX", key, field, value)));
     }
     else
     {
         return(client.Execute(new RedisBoolean("HSET", key, field, value)));
     }
 }
예제 #30
0
        /// <summary>
        /// 将 <paramref name="member"/> 从 <paramref name="source"/> 集合移动到 <paramref name="destination"/> 集合。
        /// </summary>
        /// <param name="client">Redis 客户端。</param>
        /// <param name="source">源集合。</param>
        /// <param name="destination">目标集合。</param>
        /// <param name="member">移动的成员。</param>
        /// <returns>表示移动是否成功。</returns>
        public static bool SMove(this IRedisClient client, string source, string destination, BinaryValue member)
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (string.IsNullOrWhiteSpace(source))
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (string.IsNullOrWhiteSpace(destination))
            {
                throw new ArgumentNullException(nameof(destination));
            }

            return(client.Execute(new RedisBoolean("SMOVE", source, destination, member)));
        }