diff --git a/NewLife.Redis/RedisClient.cs b/NewLife.Redis/RedisClient.cs index 595a3b5..51dfb10 100644 --- a/NewLife.Redis/RedisClient.cs +++ b/NewLife.Redis/RedisClient.cs @@ -1084,6 +1084,10 @@ public class RedisClient : DisposeBase { dic[keys[i]] = (T?)Host.Encoder.Decode(pk, typeof(T)); } + else if (rs[i] == null) + { + dic[keys[i]] = default; + } } return dic; diff --git a/XUnitTest/RedisTest.cs b/XUnitTest/RedisTest.cs index f34f137..c0fd391 100644 --- a/XUnitTest/RedisTest.cs +++ b/XUnitTest/RedisTest.cs @@ -583,4 +583,27 @@ public class RedisTest ic.Remove(key); } + + [Fact] + public void GetAllWithNull() + { + var rds = _redis; + + var user = new User { Name = "NewLife" }; + User user2 = null; + rds.Set("user", user, -1); + rds.Set("user2", user2, 3600); + + var uservalue = rds.Get("user"); + var user2value = rds.Get("user2"); + + var keys = new[] { "user", "user2" }; + var values = rds.GetAll(keys); + + // 应该返回2个值,但是GetALl()这里只返回一个key的值 + Assert.True(values.Count >= 2); + Assert.NotNull(values["user"]); + Assert.Null(values["user2"]); + Assert.Equal(user.Name, values["user"].Name); + } } \ No newline at end of file