如何在java代码中动态区分memcahce实例?

如何在java代码中动态区分memcahce实例?,java,design-patterns,memcached,Java,Design Patterns,Memcached,有人能提出任何设计模式来动态区分java代码中的memcahce实例吗? 以前在我的应用程序中,只有一个memcache实例是这样配置的 步骤1: dev.memcached.location=33.10.77.88:11211 dev.memcached.poolsize=5 步骤2: 然后我在代码中访问memcache,如下所示 private MemcachedInterface() throws IOException { String location =stringPara

有人能提出任何设计模式来动态区分java代码中的memcahce实例吗?

以前在我的应用程序中,只有一个memcache实例是这样配置的

步骤1: dev.memcached.location=33.10.77.88:11211

dev.memcached.poolsize=5

步骤2: 然后我在代码中访问memcache,如下所示

private MemcachedInterface() throws IOException {

    String location =stringParam("memcached.location", "33.10.77.88:11211");

    MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(location));

}
然后,我使用上面的MemcachedInterface()在代码中调用该memcache,如下所示

步骤3: MemcachedInterface.getSoleInstance()

然后我使用MemcachedInterface()获取/设置数据,如下所示

private MemcachedInterface() throws IOException {

    String location =stringParam("memcached.location", "33.10.77.88:11211");

    MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(location));

}
MemcachedInterface.set(MEMCACHED_CUSTS,{}); resp=MemcachedInterface.get(MEMCACHED_CUSTS)

我的问题是,如果我在我们的架构中引入一个新的memcache实例,配置如下:

private MemcachedInterface() throws IOException {

    String location =stringParam("memcached.location", "33.10.77.88:11211");

    MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(location));

}
步骤1: dev.memcached.location=33.10.77.89:11211 dev.memcached.poolsize=5

因此,第一个memcache实例位于33.10.77.88:11211,第二个memcache实例位于33.10.77.89:11211

在这之前没关系……但是

在这种情况下,如何处理步骤2和步骤3,以动态获取MemcachedInterface

1) 我应该在步骤2中再使用一个名为MemcachedInterface2()的接口吗

现在实际问题来了,

我的应用程序中有4个Web服务器。以前所有服务器都在写入MemcachedInterface(),但现在我将介绍另外一个memcache实例,例如:MemcachedInterface2()ws1和ws2应写入MemcachedInterface(),ws3和ws4应写入ex:MemcachedInterface2()中

因此,如果我再使用一个名为MemcachedInterface2()的接口,如上所述

这是一个代码负担,因为我应该将使用WS3和WS4的所有类更改为Ex:MemcachedInterface2()


有人能推荐一种代码更改有限的方法吗?

xmemcached支持固定哈希,这将允许您的客户端从池中选择正确的memcached服务器实例。你可以参考这个答案了解更多细节

所以,如果我理解正确,你必须

  • 在所有Web应用程序中仅使用一个memcached客户端
  • 由于在memcached客户机
    MemcachedInterface
    周围有自己的包装器类,因此必须向该接口添加一些方法,以便能够向现有客户机添加/删除服务器。请参阅用户指南(向下滚动一点):

  • 就我所见,您在不同的机器上运行重复的代码,就像并行web服务一样。因此,我建议将其区分开来

  • 使用Singleton Facade服务包装memcached客户端。(我想你已经这样做了)
  • 使用封装。封装memcached客户机,以便与代码分离<代码>接口L2Cache
  • 对于每个服务器,在全局变量中为它们指定一个名称。通过JVM分配这些值,或者通过jar或其他方式分配您自己的配置文件。JVM:
    --Dcom.projectname.servername=server-1
  • 使用此全局变量作为参数,配置服务getInstance方法
    祝你的设计好运

    您应该在配置中将所有memcached服务器实例列为分隔的空间

    e、 g。 33.10.77.88:11211 33.10.77.89:11211

    因此,在您的代码(步骤2)中:

    在第三步中,你不需要改变任何东西<代码>MemcachedInterface.getSoleInstance()

    您可以在memcached教程文章中阅读更多内容:

    使用Memcached提高Java企业性能第1部分:体系结构和设置

    使用Memcached提高Java企业性能,第2部分:数据库驱动的web应用