【发布时间】:2020-04-15 09:34:57
【问题描述】:
在使用 C# 检索我在 Redis 服务器上添加的键的值时,不会检索所有数据。
例如,我有键 192.168.1.1 和这个键的值 A$B$C$D$E$F$G$H 和分隔符 $ 用于拆分。
当我尝试使用此 c# 代码从 Redis 检索 192.168.1.1 的值时;
public string GetCurrentVersion(string clientName)
{
return PipelineGet(redis.GetDatabase().StringGetAsync(clientName + ",Plugins"));
}
private string PipelineGet(Task<RedisValue> value)
{
try
{
var result = redis.GetRedis().Wait(value);
if (result.ToString() == null)
{
return "";
}
return result.ToString();
}
catch (Exception ex)
{
return "";
}
}
它返回 192.168.1.1 的值,如 ABCD 或 ABCDE 或 AB 或 ABCDEEFGH。有时检索所有数据,但有时不检索。不等待所有数据稳定检索。有人可以解释一下这个原因吗?
这里是插入函数;
public void InsertCurrentVersion(string clientName, string pluginName, string currentVersion)
{
redis.GetDatabase().StringAppend(clientName + ",Plugins", pluginName + "," + currentVersion + "$");
}
【问题讨论】:
-
这似乎不太可能;我很高兴认为出了点问题,但是:你是如何编写这个值的?您是否有可能(并且更有可能?)从正在编写它的东西中看到一个中间状态作为对
APPEND的多次调用?注意:这里不需要使用StringGetAsync-StringGet应该可以正常工作,但是:无论哪种方式,值都应该是不可变的,所以我认为这无关紧要。 -
强调:我并不是说它不是库错误,但是......似乎排除一个更有可能的问题是个好主意原因首先(即
APPEND)(还有:什么库版本,什么目标框架等) -
@MarcGravell 我也添加了附加功能。最新 Redis 版本 2.6.1 和 4.8 .Net 框架版本
标签: c# redis stackexchange.redis