鉴于以下情况,请建议我在我的应用程序中实现memcache的方法。
目前,我有10个运行相同应用程序的Web服务器和一个负载均衡器来决定请求发送到哪个Web服务器。 在每个网络服务器上,我维护一个本地缓存,即有一些类XYZ控制MySQL表xyz,这个类有初始化方法 这会使本地缓存变暖。
现在,假设网络服务器是X,Y,Z。负载均衡器向X发送请求,此请求将一些值添加到db&更新缓存。负载均衡器再次将相同的请求发送给Y.但是由于服务器Y没有缓存中的值,因此它会访问数据库。
因此,在这种情况下,我应该如何在我的应用程序中实现memcache,以便最大限度地减少db命中。 我是否应该有一个单独的memcache服务器,所有其他10个Web服务器都将从此memcacher服务器获取缓存数据?
答案 0 :(得分:3)
一种解决方法(虽然不太理想)是在负载均衡器上实现粘性会话,以便来自一个用户的请求始终通过同一服务器(在其会话期间)。如果服务器死亡或者您需要在会话之间共享缓存数据,这无济于事(但如果您的负载均衡器支持它,则可以轻松快速地完成)。
否则,更好的解决方案是使用类似memcached的东西(或者如果你喜欢冒险的话,使用membase)。 Memcached既可以部署在每台服务器上,也可以部署在不同的服务器上(使用多台服务器可以避免一台服务器死机并使用它来缓存)。然后在每个应用程序服务器上为所有memcached服务器的memcached客户端连接详细信息指定(在每个服务器上按相同的顺序放置它们,并在memcached客户端选项中使用一致的散列算法来确定哪个服务器在哪个服务器上缓存键将去)。 简而言之 - 您现在有一个工作的memcached设置(只要您在应用程序中明智地使用它)
有很多memcached教程可以帮助我们完成这一切的更好点,但希望我的帖子能给你一些大方向。