假设我有多个memcached服务器,如下所示:
//PHP $MEMCACHE_SERVERS = array( "10.1.1.1",//web1 "10.1.1.2",//web2 "10.1.1.3",//web3 ); $memcache = new Memcache(); foreach($MEMCACHE_SERVERS as $server){ $memcache->addServer ( $server ); }
然后我设置这样的数据:
$huge_data_for_frong_page = 'some data blah blah blah'; $memcache->set("huge_data_for_frong_page",$huge_data_for_frong_page);
然后我检索这样的数据:
$huge_data_for_frong_page = $memcache->get("huge_data_for_frong_page");
当我要从memcached服务器检索这个数据时 – PHP memcached客户端将如何知道哪个服务器来查询这些数据?还是memcached客户端查询所有memcached服务器?
那么你可以写这本书,但基本原则是有一些不同的方法.
缓存中最常见和最有意义的方法是分片.这意味着仅在一个服务器上存储数据,某些方法用于确定哪个服务器.所以它可以从这个服务器获取,只涉及一个服务器.
这在密钥/值环境中显然可以作为memcached使用.
通常的做法是采用密钥的加密散列.计算这个散列MOD服务器的数量,结果是您将存储和获取数据的服务器.
该过程产生或多或少相等的平衡.
如何在memcached中完全完成,但是肯定会有某种哈希.
但请注意,此技术不是高可用性.所以如果一个服务器失败,条目就会消失.所以你显然只能用于缓存的目的.
其他teqniques,例如资源的高可用性是必要的,需要很长的时间来计算,并在自己的背景下自动加热,涉及复制.
缓存环境中最常见的形式是具有最新时间戳冲突解决的主 – 主复制.哪个基本上意味着每个服务器从不在本地服务器上的每个服务器获取数据(这是使用复制日志和字节偏移来完成的).如果存在冲突,则使用最新版本(忽略服务器之间轻微的时间偏移).
但是在其他环境中,只有很少的内容被写入,但是很多是读取的,通常是一个级联,其中只有一个或几个主服务器涉及,其余只是纯读复制.
但是,这样的设置是非常罕见的,因为分片可以提供最好的性能和缓存环境中数据丢失大多是可以忍受的.所以它也默认为memcached.