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