保存代码如下:
_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() 问题就解决了。
可以序列化保存然后反序列化读取,或者用其他方式来模拟二维数组(如list)
多线程访问redis?,有用连接池?
不太懂为何要保存对象,事实上即使可以也是因为它内部实现了序列化、反序列化
何不使用最原始的 k/v 都使用 string 呢?
请问你的redis帮助类是怎么封装的?能分享一份出来吗
– 懒东 5年前