首页 新闻 赞助 找找看

ServiceStack.Redis 如何保存与读取二维数组

0
悬赏园豆:50 [待解决问题]

保存代码如下:

_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

请问如何解决这个问题?

问题补充:

不好意思,弄错了,异常是在 _cache.ContainsKey(key) 时抛出的。

后来发现 _cache.ContainsKey(key) 的异常是因为多线程访问RedisClient的单例引起的,当时RedisClient的实例是通过  new RedisClient() ,后来改为 new RedisManagerPool(host)..GetClient() 问题就解决了。

dudu的主页 dudu | 高人七级 | 园豆:31075
提问于:2017-01-06 14:17

请问你的redis帮助类是怎么封装的?能分享一份出来吗

懒东 5年前
< >
分享
所有回答(2)
0

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

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

风行魔狼 | 园豆:487 (菜鸟二级) | 2017-01-06 14:49
0

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

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

nicye | 园豆:208 (菜鸟二级) | 2017-01-06 16:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册