|
|
1
9
最简单的方法是:
|
|
|
2
16
将单实例缓存替换为分布式缓存。 一个这样的缓存可以是 JBoss Infinispan 但我敢肯定还有其他分布式缓存和网格技术,包括商业技术,目前可能更成熟。 对于一般的单例对象,我不确定。我想一开始我会尽量不要单件的。 |
|
|
3
8
你可以用 DistributedMap 这是建立在过去。 -里克 |
|
|
4
4
或者类似memcached的东西 http://www.danga.com/memcached/
|
|
|
5
1
如果可能的话,使用应用服务器对此的支持,如果可能的话(有的有,有的没有)。例如,我们使用JBoss对“ha singleton”的支持,该服务只在集群主节点上运行。这并不完美(你必须处理偶尔会让大脑放屁的情况),但这已经足够好了。 如果不能做到这一点,您可能可以使用jgroups来设计一些东西,jgroups提供集群节点自动发现和协商,但这并不简单。 最后,您可以使用数据库锁定来管理集群单例,但这是 认真地 脆弱的。不推荐。 作为集群单例的替代方案,您可以使用分布式缓存。我推荐 JBossCache (不需要运行jboss应用服务器)或ehcache(现在提供了分发机制)。您必须重新设计缓存才能以分布式方式工作(这不仅仅是奇迹般的工作),但它可能比集群单例更好。 |
|
|
6
1
我和维斯特·汉森先生在一起,尽可能远离单身汉。在经历了saaj和jaxp这样的噩梦,以及jboss上兼容的版本之后,我已经完成了对singleton和工厂的工作。SOAP消息不需要工厂来实例化它。 好吧,怒吼一下,Memcache或者类似的东西呢?您的缓存需要什么样的亲和力?如果数据过时了,会不会很糟糕,或者在数据过时的情况下是否有一定的灵活性? |
|
|
7
1
有几种方法可以处理这一问题,具体取决于1)数据的不足程度,以及2)每个实例是否始终需要具有相同的值。 如果您只需要符合数据要求的数据,但每个JVM都不需要具有匹配的数据,那么您可以让每个JVM按照相同的计划刷新其数据(例如,每30秒刷新一次)。 如果刷新需要同时进行,可以让一个JVM向其余的JVM发送一条消息,说“现在该刷新了”。 如果每个JVM总是需要相同的信息,那么您需要进行同步,此时主机会说“立即刷新”,所有缓存都会阻止任何新的查询,刷新,并告诉主机它们已经完成了。当主服务器从集群的每个成员那里得到一个应答时,它会发送另一条消息,指示继续。 |
|
|
8
1
我也面临同样的情况,但我正在使用Oracle的 应用服务器 和 一致性 . 我正在研究一个使用 散列表 从数据库中读取缓存数据(要显示的文本 网络表单 标签。为了实现这一点,开发人员使用了一个单实例来存储所有这些信息。这在单服务器环境中工作得很好,但是现在我们要进入集群解决方案,我将在这个单例实例中面临这个问题。 从我现在读到的, this is the best solution to accomplish what I want . 我希望这也能帮助你解决你的问题。 |
|
|
9
0
在这种情况下,有一些产品可以提供分布式内存缓存(如memcache)。 如果可能的话,一个更好的解决方案可能是让单例不是真正的单例,而是让应用程序能够容忍有单独的实例(比如所有实例都可以在需要刷新时识别),而不是让它们必须在JVM之间保持同步,这会使您的缓存成为瓶颈。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |