public void DecimalTest() { Decimal value = 5M; BinaryValue bv = value; Assert.Equal(value, (Decimal)bv); }
/// <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)); }
/// <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())))); }
public void GuidTest() { Guid value = Guid.NewGuid(); BinaryValue bv = value; Assert.Equal(value, (Guid)bv); }
public void StringTest() { String value = Guid.NewGuid().ToString(); BinaryValue bv = value; Assert.Equal(value, (String)bv); }
public void BooleanTest() { Boolean value = true; BinaryValue bv = value; Assert.Equal(value, (Boolean)bv); }
public void EnumTest() { TypeCode code = TypeCode.Int32; var value = BinaryValue.Create(code); Assert.Equal(code, (TypeCode)value.Parse(typeof(TypeCode))); }
public void BytesTest() { byte[] value = { 1, 2, 3 }; BinaryValue bv = value; Assert.Equal(value, (byte[])bv); }
public void CharTest() { Char value = 'a'; BinaryValue bv = value; Assert.Equal(value, (Char)bv); }
public void UInt32Test() { UInt32 value = UInt32.MaxValue; BinaryValue bv = value; Assert.Equal(value, (UInt32)bv); }
public void UInt64Test() { UInt64 value = UInt64.MaxValue; BinaryValue bv = value; Assert.Equal(value, (UInt64)bv); }
/// <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()))); }
public void DoubleTest() { Double value = 0.5; BinaryValue bv = value; Assert.Equal(value, (Double)bv); }
public void Int16Test() { Int16 value = Int16.MaxValue; BinaryValue bv = value; Assert.Equal(value, (Int16)bv); }
public void TimeSpanTest() { TimeSpan value = DateTime.Now - DateTime.Now.AddDays(-5); BinaryValue bv = value; Assert.Equal(value, (TimeSpan)bv); }
public void DateTimeTest() { DateTime value = DateTime.Now; BinaryValue bv = value; Assert.Equal(value, (DateTime)bv); }
/// <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))); }
/// <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"/> > 0 : 从表头开始向表尾搜索,移除与 <paramref name="value"/> 相等的元素,数量为 <paramref name="count"/> 。</para> /// <para>2、<paramref name="count"/> < 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))); }
/// <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))); }
/// <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))); }
/// <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))); }
/// <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> /// 返回给定的有序集合键 <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, "+")))); }
/// <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))); }
/// <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))); }
/// <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))); }
/// <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, "+")))); }
/// <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))); }
/// <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))); } }
/// <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))); }