登录
2017-01-07 8:33:21 来自:U-km 3 人回应

保存代码如下:

_cache.Set<Byte[][]>(key, data);

读取代码如下:

var value = _cache.Get<byte[][]>(key);

保存代码可以将数据保存到redis服务器:

["AgAAAiQslpamPe+CTac9Y7tKLI8AEGd0X3NlcnZlcl9zdGF0dXMAAAAEAAAAAQALR2VldGVzdEd1aWQAAAAkN2UyMjFhOTItMThlOS00YTM4LWE4MDgtODUzZjlmODYwMjNh","eyJBYnNvbHV0ZUV4cGlyYXRpb24iOm51bGwsIkFic29sdXRlRXhwaXJhdGlvblJlbGF0aXZlVG9Ob3ciOm51bGwsIlNsaWRpbmdFeHBpcmF0aW9uIjoiMDA6MjA6MDAifQ=="]

但读取时出现如下的错误:

ServiceStack.Redis.RedisResponseException: Unknown reply on integer response: 43OK
   at ServiceStack.Redis.RedisNativeClient.ReadLong() in /opt/lib/teamcity-agent/work/8dcfdcec54d0f21a/src/ServiceStack.Redis/RedisNativeClient_Utils.cs:line 850
   at ServiceStack.Redis.RedisNativeClient.SendReceive[T](Byte[][] cmdWithBinaryArgs, Func`1 fn, Action`1 completePipelineFn, Boolean sendWithoutRead) in /opt/lib/teamcity-agent/work/8dcfdcec54d0f21a/src/ServiceStack.Redis/RedisNativeClient_Utils.cs:line 572

请问如何解决这个问题?

2017-01-09 16:45:20 来自:Noel。

可以序列化保存然后反序列化读取,或者用其他方式来模拟二维数组(如list)

多线程访问redis?,有用连接池?

2017-01-09 2:01:23 来自:我是脑残啦啦啦

试试redis的命令行能不能用exists 命令检测到这个key

如果可以的话,那就是servicestack.redist的实现由问题。

它的源码是这样的

 1 public long ReadLong()
 2         {
 3             int c = SafeReadByte();
 4             if (c == -1)
 5                 throw CreateNoMoreDataError();
 6 
 7             var s = ReadLine();
 8 
 9             if (log.IsDebugEnabled)
10                 Log("R: {0}", s);
11 
12             if (c == '-')
13                 throw CreateResponseError(s.StartsWith("ERR") ? s.Substring(4) : s);
14 
15             if (c == ':' || c == '$')//really strange why ZRANK needs the '$' here
16             {
17                 long i;
18                 if (long.TryParse(s, out i))
19                     return i;
20             }
21             throw CreateResponseError("Unknown reply on integer response: " + c + s);
22         }

c是直接由一个networkstream读取的一个byte,如果c不等于:或$,就是出问题了。

https://github.com/ServiceStack/ServiceStack.Redis/blob/2b833b6e574067bc94dd5a504cf2fd5d6e7ce12c/src/ServiceStack.Redis/RedisNativeClient_Utils.cs

 

2017-01-08 9:01:22 来自:BEATA

不太懂为何要保存对象,事实上即使可以也是因为它内部实现了序列化、反序列化

何不使用最原始的 k/v 都使用 string 呢?

您的回应

你还未登陆,不能回应!登陆