From e4fcca6d4940e6f07403cf6549550666b8a0ddde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=9B=B4=E8=8D=A3?= Date: Tue, 24 Jun 2025 16:31:37 +0800 Subject: [PATCH] =?UTF-8?q?RedisHash-Values=E6=95=B0=E6=8D=AE=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XUnitTest/HashTest.cs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/XUnitTest/HashTest.cs b/XUnitTest/HashTest.cs index bd3e379..2a680c4 100644 --- a/XUnitTest/HashTest.cs +++ b/XUnitTest/HashTest.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; + using NewLife.Caching; using NewLife.Log; +using NewLife.Serialization; + using Xunit; namespace XUnitTest; @@ -111,6 +114,35 @@ public class HashTest rh["0"] = new EventInfo { EventId = "1234", EventName = "Stone" }; } + [Fact(DisplayName = "获取所有数据,丢失数据bug")] + public void ValuesHashTest() + { + //RedisHash、RedisList[Values、Values、GetAll、Search] redis 5.0 都有类似的情况 + //大批量数据获取,大概率会数据不完整,具体原有不明 + var key = $"NewLife:HashTestInfo:Test"; + { + _redis.MaxMessageSize = int.MaxValue; + var hash = _redis.GetDictionary(key) as RedisHash; + hash.Clear(); + for (var i = 0; i < 10000; i++) + { + var k = i.ToString(); + hash.Add(k, new EventInfo { EventId = k, EventName = k }.ToJson()); + } + + //直接获取全部数据,如泛型对象的直接报错 + var list = hash.Values.ToList(); + for (var i = 0; i < list.Count; i++) + { + try { var item = list[i].ToJsonEntity(); } + catch (Exception ex) + { + //某块连续的数据段可能会不完整 + Assert.Fail($"Index:{i} Item:{list[i]} Msg:{ex.Message}"); + } + } + } + } [Fact] public void RemoveTest()