servicestack.redis,Redis,Double Quotes,servicestack.redis" /> servicestack.redis,Redis,Double Quotes,servicestack.redis" />

ServiceStack Redis客户端获取<;T>;(键)从字符串数据中删除引号

ServiceStack Redis客户端获取<;T>;(键)从字符串数据中删除引号,redis,double-quotes,servicestack.redis,Redis,Double Quotes,servicestack.redis,我正在使用ServiceStack.Redis库与Redis一起工作。首先,我已经实现了这个解决方案。get/set方法对于纯文本/字符串很有效 现在,当我使用引号保存字符串(使用转义字符)时,它会正确保存(我在redis cli中验证了这一点)。但是Get方法返回的字符串删除了所有双引号 例如,保存此字符串-“TestSample”将按预期保存和获取。也, 使用“引号”保存“TestSample”很好,并且在redis cli中显示相同的内容。但是Get方法的输出变成了“带引号的TestSam

我正在使用ServiceStack.Redis库与Redis一起工作。首先,我已经实现了这个解决方案。get/set方法对于纯文本/字符串很有效

现在,当我使用引号保存字符串(使用转义字符)时,它会正确保存(我在redis cli中验证了这一点)。但是Get方法返回的字符串删除了所有双引号

例如,保存此字符串-“TestSample”将按预期保存和获取。也, 使用“引号”保存“TestSample”很好,并且在redis cli中显示相同的内容。但是Get方法的输出变成了“带引号的TestSample”

public bool SetDataInCache(字符串缓存键,T缓存数据)
{
尝试
{
使用(_redisClient=new redisClient(_cacheConfigs.RedisHost))
{                   
_redisClient.As().SetValue(cacheKey,cacheData,new TimeSpan(0,0300));
}
返回true;
}
捕获(例外情况除外)
{
返回false;
}
}
公共T GetDataFromCacheByType(字符串缓存键)
{
T retVal=默认值(T);
尝试
{
使用(_redisClient=new redisClient(_cacheConfigs.RedisHost))
{
if(_redisClient.ContainsKey(cacheKey))
{
var wrapper=_redisClient.As();
retVal=wrapper.GetValue(cacheKey);
}
返回返回;
}
}
捕获(例外情况除外)
{                
返回返回;
}
} 用法:

   cacheObj.SetDataInCache("MyKey1","TestSample");
   cacheObj.SetDataInCache("MyKey2","TestSample \"with\" \"quotes\"");

   string result1 = Convert.ToString(cacheObj.GetDataFromCacheByType<string>("MyKey1"));
   string result2 = Convert.ToString(cacheObj.GetDataFromCacheByType<string>("MyKey2"));
cacheObj.SetDataInCache(“MyKey1”、“TestSample”);
SetDataInCache(“MyKey2”,“TestSample\”和“quotes\”);
string result1=Convert.ToString(cacheObj.GetDataFromCacheByType(“MyKey1”);
string result2=Convert.ToString(cacheObj.GetDataFromCacheByType(“MyKey2”);
实际:“带引号的TestSample”


应为“TestSample\”和“quotes\”

类型化通用API仅用于创建用于序列化复杂类型的通用Redis客户端。如果要实现通用缓存,则应使用
IRedisClient
API,例如:

_redisClient.Set(cacheKey, cacheData, new TimeSpan(0,0,300));
然后使用以下命令检索回:

var retVal = _redisClient.Get<T>(cacheKey);
注意:调用
IRedisClient.ContainsKey()
会执行额外的不必要的Redis I/O操作,因为您返回的是
default(T)
无论如何,您应该只调用
\u redisClient.Get()
,它会返回不存在键的默认值


我也面临同样的问题。但是我使用redisClient.Get(key)来获取值,双引号被删除了。从你的问题中,我得到了一个提示,并尝试了redisClient.GetValue(key),它对我有效。谢谢你发布这个问题+问题1。
var retVal = _redisClient.Get<T>(cacheKey);
_redisClient.SetValue(cacheKey, cacheData.ToJson());
var retVal = _redisClient.GetValue(cacheKey).FromJson<T>();