问题: - java客户端需要担心多个服务器吗?
含义: - 我在memcached客户端中给了两个服务器,但是当我从缓存设置或获取密钥时,我是否需要向其提供任何服务器相关信息或者memcache本身会处理它?</ p>
我的知识: - Memcache本身由于一致的散列而受到关注。
但是spymemcached 2.8.0提供了一致的哈希???
答案 0 :(得分:4)
Memcached服务器是汇集服务器。这意味着您定义了一个服务器池(列表),当Java客户端尝试写入时,它会向池写入。
客户端的工作是决定池中的哪个服务器将接收并存储该值以及它将如何从该池中检索值。
基本上,这允许您从一台Memcached服务器(可能在同一台机器上)开始,如果推送,您可以在池中添加几十台服务器,而无需触及应用程序代码。
由于客户端负责跨服务器池分发数据(客户端必须选择正确的memcached服务器来存储/获取数据),因此几乎没有分发算法。
最简单的一个是modula。此算法根据池中memcached服务器的数量分配密钥。如果池中的服务器数量发生变化,客户端将无法查找存储的数据,则会出现缓存未命中。在这种情况下,最好使用consistent hashing。
最受欢迎的java memcached客户端spymemached和xmemcached支持一致性散列。
在某些用例中,不是直接使用memcached客户端,而是可以使用simple-spring-memcached或Spring 3.1 Cache Abstraction通过AOP(拦截器)将缓存添加到spring应用程序中。 Spring Cache目前不支持memcached,但simple-spring-memcached在快照构建和即将发布的3.0.0版本中提供了integration。
答案 1 :(得分:0)
MemCached服务器将自行管理存储和检索键/值。 使用哈希存储时会生成密钥并存储它。 虽然检索再次哈希给定的密钥并找到它已存储在哪个服务器上然后获取它,这将需要一些时间。
相反,有一种方法可用于存储和检索。
创建一个HashMap并将具有服务器地址的密钥存储为值。现在下次如果需要获取相同的密钥而不是搜索,您将直接从HashMap获取服务器地址,并且您只需要从那里获取值。因此,您可以节省MemCahce服务器的搜索时间。
希望你理解我的意思。