Skip to content

Commit d1a624c

Browse files
committed
[fix] 修正ZADD不支持超大Int64整数的问题,主要原因是它转为Double时使用了科学计数法,读取解析时需要支持。fix #152
1 parent 0ff2b93 commit d1a624c

File tree

6 files changed

+54
-6
lines changed

6 files changed

+54
-6
lines changed

NewLife.Redis/NewLife.Redis.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
</ItemGroup>
5757

5858
<ItemGroup>
59-
<PackageReference Include="NewLife.Core" Version="11.5.2025.601" />
59+
<PackageReference Include="NewLife.Core" Version="11.5.2025.629-beta0325" />
6060
</ItemGroup>
6161

6262
<ItemGroup>

NewLife.Redis/RedisSortedSet.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ public RedisSortedSet(Redis redis, String key) : base(redis, key) { }
2525
/// <returns>添加到有序集合的成员数量,不包括已经存在更新分数的成员</returns>
2626
public Int32 Add(T member, Double score) => Execute((rc, k) => rc.Execute<String>("ZADD", Key, score, member), true).ToInt(-1);
2727

28+
/// <summary>添加元素并指定分数,返回添加到集合的成员数量</summary>
29+
/// <param name="member">元素</param>
30+
/// <param name="score">分数</param>
31+
/// <returns>添加到有序集合的成员数量,不包括已经存在更新分数的成员</returns>
32+
public Int32 Add(T member, Int64 score) => Execute((rc, k) => rc.Execute<String>("ZADD", Key, score, member), true).ToInt(-1);
33+
2834
/// <summary>批量添加,返回添加到集合的成员数量</summary>
2935
/// <param name="members"></param>
3036
/// <param name="score"></param>
@@ -41,6 +47,22 @@ public Int32 Add(IEnumerable<T> members, Double score)
4147
return Execute((rc, k) => rc.Execute<String>("ZADD", args.ToArray()), true).ToInt(-1);
4248
}
4349

50+
/// <summary>批量添加,返回添加到集合的成员数量</summary>
51+
/// <param name="members"></param>
52+
/// <param name="score"></param>
53+
/// <returns>添加到有序集合的成员数量,不包括已经存在更新分数的成员</returns>
54+
public Int32 Add(IEnumerable<T> members, Int64 score)
55+
{
56+
var args = new List<Object> { Key };
57+
58+
foreach (var item in members)
59+
{
60+
args.Add(score);
61+
args.Add(item!);
62+
}
63+
return Execute((rc, k) => rc.Execute<String>("ZADD", args.ToArray()), true).ToInt(-1);
64+
}
65+
4466
/// <summary>删除元素</summary>
4567
/// <param name="members"></param>
4668
/// <returns></returns>

Samples/Benchmark/Benchmark.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</ItemGroup>
2525
<ItemGroup>
2626
<PackageReference Include="BenchmarkDotNet" Version="0.15.0" />
27-
<PackageReference Include="NewLife.Stardust" Version="3.3.2025.506" />
27+
<PackageReference Include="NewLife.Stardust" Version="3.4.2025.601" />
2828
</ItemGroup>
2929
<ItemGroup>
3030
<ProjectReference Include="..\..\NewLife.Redis\NewLife.Redis.csproj" />

Test/Test.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</PropertyGroup>
1717

1818
<ItemGroup>
19-
<PackageReference Include="NewLife.Core" Version="11.5.2025.601" />
19+
<PackageReference Include="NewLife.Core" Version="11.5.2025.629-beta0325" />
2020
</ItemGroup>
2121

2222
<ItemGroup>

XUnitTest/SortedSetTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,32 @@ public void Add_xx()
190190
Assert.Equal(33.44, zset.GetScore("stone"));
191191
}
192192

193+
[Fact]
194+
public void Add_xx2()
195+
{
196+
var rkey = "zset_add_xx2";
197+
198+
// 删除已有
199+
_redis.Remove(rkey);
200+
201+
var zset = new RedisSortedSet<String>(_redis, rkey);
202+
203+
// 插入数据
204+
var ticks = DateTime.Now.Ticks;
205+
zset.Add("stone", ticks);
206+
zset.Add("stone1", ticks);
207+
Assert.Equal(2, zset.Count);
208+
209+
var r = zset.GetScore("stone");
210+
var r1 = zset.GetScore("stone2");
211+
var r2 = zset.Execute((r, k) => r.Execute("ZSCORE", zset.Key, "stone"), false);
212+
213+
Assert.Equal(ticks, r);
214+
Assert.Equal(0, r1);
215+
Assert.NotEmpty(r2);
216+
Assert.NotEqual("0", r2);
217+
}
218+
193219
[Fact]
194220
public void Add_nx()
195221
{

XUnitTest/XUnitTest.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99

1010
<ItemGroup>
1111
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />
12-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
13-
<PackageReference Include="NewLife.Core" Version="11.5.2025.601" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
13+
<PackageReference Include="NewLife.Core" Version="11.5.2025.629-beta0325" />
1414
<PackageReference Include="NewLife.UnitTest" Version="1.0.2025.101" />
1515
<PackageReference Include="xunit" Version="2.9.3" />
16-
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.0">
16+
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.1">
1717
<PrivateAssets>all</PrivateAssets>
1818
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1919
</PackageReference>

0 commit comments

Comments
 (0)