我有一个HashMap<String,Wallet>
,Wallet
是一类bitcoinj。我试图使用redisson RMap
在redis数据库中保存钱包对象,我得到了stackOverflow错误。那么有没有办法在不同服务器上运行的两个应用程序之间共享HashMap
。
以下是例外:
org.redisson.client.RedisException:意外的异常 在处理命令时 org.redisson.command.CommandAsyncService.convertException(CommandAsyncService.java:321) 在 org.redisson.command.CommandAsyncService.get(CommandAsyncService.java:164) at org.redisson.RedissonObject.get(RedissonObject.java:70)at org.redisson.RedissonMap.put(RedissonMap.java:197)at com.examples.redis.RedissonedBitcoin.main(RedissonedBitcoin.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)at org.codehaus.mojo.exec.ExecJavaMojo $ 1.run(ExecJavaMojo.java:282)at at java.lang.Thread.run(Thread.java:748)
引起: com.fasterxml.jackson.databind.JsonMappingException:无限 递归(StackOverflowError)(通过引用链: org.bitcoinj.params.TestNet3Params [&#34; genesisBlock&#34;] - &GT; org.bitcoinj.core.Block [&#34; PARAMS&#34;] - &GT; org.bitcoinj.params.TestNet3Params [&# 34; genesisBlock&#34;] -
答案 0 :(得分:1)
我认为到目前为止你能得到的最佳建议(因为根描述非常模糊)是开发一个简单的服务,它将为客户提供获取功能。当然你也应该考虑安全性来避免中间人攻击等等。
如果您绝对不想这样做,可以使用Chronicle-Map来保存硬盘上的数据。此外,如果您没有环境限制,您可以使用您已选择的任何内存数据库Ehcache,Hazelcast,Reddis准备特殊服务器。
希望它有所帮助!
答案 1 :(得分:0)
您仍然可以使用Redis共享此数据。 Redis用于会话存储。
你在杰克逊面临的问题是循环参考。
Here是一篇关于如何解决杰克逊循环引用的文章。
我还会考虑不在Redis中存储地图,而只是将钱包对象存储在redis键下,以便您可以获取单个钱包。
答案 2 :(得分:0)
您可以使用Apache Zookeeper和Github上的KeptCollections项目执行此操作。它不仅解决了通信协议,还解决了并发访问资源可能遇到的问题。