gpt4 book ai didi

php - 多个 memcached 服务器问题

转载 作者:可可西里 更新时间:2023-10-31 22:45:59 24 4
gpt4 key购买 nike

假设 - 如果我有多个像这样的 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 这样的键/值环境中运行良好。

通常的做法是采用 key 的加密散列。计算此哈希 MOD 服务器数,结果是您将存储和获取数据的服务器。

此过程或多或少会产生相等的平衡。

我不知道在 memcached 中具体是如何完成的。但肯定是某种哈希。

但请注意,此技术的可用性不高。因此,如果一台服务器出现故障,条目就会消失。所以你显然只能将它用于缓存目的。

其他技术,例如需要资源的高可用性,需要很长时间才能计算并在后台自动预热,涉及复制。

缓存环境中最常见的形式是具有最新时间戳冲突解决的主-主复制。这基本上意味着每个服务器都从尚未在本地服务器上的每个服务器获取数据(这是使用复制日志和字节偏移量完成的)。如果存在冲突,则使用最新版本(忽略服务器之间的轻微时间偏移)。

但是在其他环境中,例如只写入很少但读取很多的环境中,通常会出现级联,其中只涉及一个或几个主服务器,其余只是纯读取复制。

但这些设置非常少见,因为如上所述的分片可提供最佳性能,并且在缓存环境中数据丢失大多是可以容忍的。所以它也是 memcached 的默认值。

关于php - 多个 memcached 服务器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com