[fix] 修正ZADD不支持超大Int64整数的问题,主要原因是它转为Double时使用了科学计数法,读取解析时需要支持。fix https://github.com/NewLifeX/NewLife.Redis/issues/152
This commit is contained in:
parent
0ff2b935fb
commit
d1a624ca4f
|
@ -56,7 +56,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.601" />
|
<PackageReference Include="NewLife.Core" Version="11.5.2025.629-beta0325" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -25,6 +25,12 @@ public class RedisSortedSet<T> : RedisBase
|
||||||
/// <returns>添加到有序集合的成员数量,不包括已经存在更新分数的成员</returns>
|
/// <returns>添加到有序集合的成员数量,不包括已经存在更新分数的成员</returns>
|
||||||
public Int32 Add(T member, Double score) => Execute((rc, k) => rc.Execute<String>("ZADD", Key, score, member), true).ToInt(-1);
|
public Int32 Add(T member, Double score) => Execute((rc, k) => rc.Execute<String>("ZADD", Key, score, member), true).ToInt(-1);
|
||||||
|
|
||||||
|
/// <summary>添加元素并指定分数,返回添加到集合的成员数量</summary>
|
||||||
|
/// <param name="member">元素</param>
|
||||||
|
/// <param name="score">分数</param>
|
||||||
|
/// <returns>添加到有序集合的成员数量,不包括已经存在更新分数的成员</returns>
|
||||||
|
public Int32 Add(T member, Int64 score) => Execute((rc, k) => rc.Execute<String>("ZADD", Key, score, member), true).ToInt(-1);
|
||||||
|
|
||||||
/// <summary>批量添加,返回添加到集合的成员数量</summary>
|
/// <summary>批量添加,返回添加到集合的成员数量</summary>
|
||||||
/// <param name="members"></param>
|
/// <param name="members"></param>
|
||||||
/// <param name="score"></param>
|
/// <param name="score"></param>
|
||||||
|
@ -41,6 +47,22 @@ public class RedisSortedSet<T> : RedisBase
|
||||||
return Execute((rc, k) => rc.Execute<String>("ZADD", args.ToArray()), true).ToInt(-1);
|
return Execute((rc, k) => rc.Execute<String>("ZADD", args.ToArray()), true).ToInt(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>批量添加,返回添加到集合的成员数量</summary>
|
||||||
|
/// <param name="members"></param>
|
||||||
|
/// <param name="score"></param>
|
||||||
|
/// <returns>添加到有序集合的成员数量,不包括已经存在更新分数的成员</returns>
|
||||||
|
public Int32 Add(IEnumerable<T> members, Int64 score)
|
||||||
|
{
|
||||||
|
var args = new List<Object> { Key };
|
||||||
|
|
||||||
|
foreach (var item in members)
|
||||||
|
{
|
||||||
|
args.Add(score);
|
||||||
|
args.Add(item!);
|
||||||
|
}
|
||||||
|
return Execute((rc, k) => rc.Execute<String>("ZADD", args.ToArray()), true).ToInt(-1);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>删除元素</summary>
|
/// <summary>删除元素</summary>
|
||||||
/// <param name="members"></param>
|
/// <param name="members"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="BenchmarkDotNet" Version="0.15.0" />
|
<PackageReference Include="BenchmarkDotNet" Version="0.15.0" />
|
||||||
<PackageReference Include="NewLife.Stardust" Version="3.3.2025.506" />
|
<PackageReference Include="NewLife.Stardust" Version="3.4.2025.601" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\NewLife.Redis\NewLife.Redis.csproj" />
|
<ProjectReference Include="..\..\NewLife.Redis\NewLife.Redis.csproj" />
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.601" />
|
<PackageReference Include="NewLife.Core" Version="11.5.2025.629-beta0325" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -190,6 +190,32 @@ public class SortedSetTests
|
||||||
Assert.Equal(33.44, zset.GetScore("stone"));
|
Assert.Equal(33.44, zset.GetScore("stone"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Add_xx2()
|
||||||
|
{
|
||||||
|
var rkey = "zset_add_xx2";
|
||||||
|
|
||||||
|
// 删除已有
|
||||||
|
_redis.Remove(rkey);
|
||||||
|
|
||||||
|
var zset = new RedisSortedSet<String>(_redis, rkey);
|
||||||
|
|
||||||
|
// 插入数据
|
||||||
|
var ticks = DateTime.Now.Ticks;
|
||||||
|
zset.Add("stone", ticks);
|
||||||
|
zset.Add("stone1", ticks);
|
||||||
|
Assert.Equal(2, zset.Count);
|
||||||
|
|
||||||
|
var r = zset.GetScore("stone");
|
||||||
|
var r1 = zset.GetScore("stone2");
|
||||||
|
var r2 = zset.Execute((r, k) => r.Execute("ZSCORE", zset.Key, "stone"), false);
|
||||||
|
|
||||||
|
Assert.Equal(ticks, r);
|
||||||
|
Assert.Equal(0, r1);
|
||||||
|
Assert.NotEmpty(r2);
|
||||||
|
Assert.NotEqual("0", r2);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Add_nx()
|
public void Add_nx()
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,11 +9,11 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.601" />
|
<PackageReference Include="NewLife.Core" Version="11.5.2025.629-beta0325" />
|
||||||
<PackageReference Include="NewLife.UnitTest" Version="1.0.2025.101" />
|
<PackageReference Include="NewLife.UnitTest" Version="1.0.2025.101" />
|
||||||
<PackageReference Include="xunit" Version="2.9.3" />
|
<PackageReference Include="xunit" Version="2.9.3" />
|
||||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.0">
|
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.1">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
Loading…
Reference in New Issue