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