java - 如何在我的应用程序中实现 Memcache

标签 java tomcat memcached

鉴于以下场景,请建议我一种在我的应用程序中实现 memcache 的方法。

目前,我有 10 个网络服务器,其中运行相同的应用程序,还有一个负载均衡器来决定将请求发送到哪个网络服务器。 在每个网络服务器上,我维护一个本地缓存,即有一些类 XYZ 控制 MySQL 表 xyz 并且该类具有初始化方法 这将预热本地缓存。

现在,假设网络服务器是 X、Y、Z。负载均衡器向 X 发送请求,该请求向数据库添加一些值并更新缓存。负载均衡器再次向 Y 发送相同的请求。但由于服务器 Y 的缓存中没有该值,因此它会访问数据库。

因此,在这种情况下,我应该如何在应用程序中实现内存缓存,以便最大限度地减少数据库命中。 我是否应该有一个单独的 memcache 服务器,并且所有其他 10 个网络服务器将从该 memcacher 服务器获取缓存数据?

最佳答案

一种解决方法(尽管并不理想)是在负载均衡器上实现粘性 session ,以便来自一个用户的请求始终通过同一服务器(在 session 期间)。如果服务器挂掉或者您需要在 session 之间共享缓存数据,这并没有多大帮助(但如果您的负载均衡器支持的话,这很容易且快速)。

否则,更好的解决方案是使用诸如 memcached 之类的东西(如果您喜欢冒险,则可以使用 membase )。 Memcached 可以部署在每台服务器上,也可以部署在单独的服务器上(使用多台服务器可以避免一台服务器挂掉并带走您的缓存的问题)。然后在每个应用程序服务器上指定所有 memcached 服务器的 memcached 客户端连接详细信息(将它们在每个服务器上以相同的顺序放置,并在 memcached 客户端选项中使用一致的哈希算法来确定在哪些服务器上缓存键将会消失)。 简而言之 - 您现在已经有了一个有效的 memcached 设置(只要您在应用程序中合理地使用它)

有很多 memcached 教程可以帮助您完成这一切,但希望我的文章能给您一些总体指导。

关于java - 如何在我的应用程序中实现 Memcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6925303/

相关文章:

java - 使用 derby 通过 EmbeddedDatabaseBuilder 重新执行应用程序后,表正在刷新

tomcat - 应该如何从本地机器监控 Tomcat

python - 如何使用 django 1.8 进行 memcached session

java - 在 Gridbaglayout 中将标签和文本框移至左侧

java - Tomcat上Spring Boot应用程序启动报错(数据源实例化失败)

java - 如何使用 Eclipse 和 Tomcat 为没有 web.xml 的动态 Web 项目创建 JNDI

java - 如何在 Ubuntu 中为 Java 5/Tomcat 5.5 编译 .war?

php - Memcached::touchByKey():touch 只支持二进制协议(protocol)

go - 如何在 golang 中模拟 memcached 进行单元测试?

java - 如何在android studio中导入具有库依赖项的eclipse android项目?