Php Laravel multiple memcached:故障转移不起作用

Php Laravel multiple memcached:故障转移不起作用,php,laravel,laravel-5,memcached,Php,Laravel,Laravel 5,Memcached,我有两个memcached服务器。我设置了以下配置,我的期望是,即使两台服务器中的一台停机,我的PHP应用程序也可以使用AliveMemcached。但它没有起作用。执行Memcached的get()方法时出现“未添加Memcached服务器”错误 我正在使用最新版本的memcached服务器和客户端 memcached 1.4.25-2ubuntu1 php-memcached version 3.0.0b1 libmemcached version 1.0.18 你有什么想法吗 编辑1

我有两个memcached服务器。我设置了以下配置,我的期望是,即使两台服务器中的一台停机,我的PHP应用程序也可以使用AliveMemcached。但它没有起作用。执行Memcached的get()方法时出现“未添加Memcached服务器”错误

我正在使用最新版本的memcached服务器和客户端

memcached 1.4.25-2ubuntu1
php-memcached version 3.0.0b1
libmemcached version 1.0.18
你有什么想法吗


编辑1

“未添加Memcached服务器”错误来自此处


编辑2

我发现Memcached::XXX选项是整数值。因此,选项值不会传递给服务器。我解决了这个问题,但结果没有改变

'options' => array('10', '1', '2', true, '1')

编辑3

这里记录了Laravel的缓存示例设置


编辑4

我尝试在没有Laravel的情况下使用PHP,然后我发现当两台服务器中的一台死机时,getVersion()返回null

<?php

$m = new Memcached();

$m->addServer('127.0.0.1', 11211);
$m->addServer('127.0.0.1', 11212);

$status = $m->getVersion();

if ($status == null){
  echo "null";
} else {
  echo "not null";
}

* when both the two servers are alive

// not null
// $status = array('127.0.0.1:11211' => '1.4.25', '127.0.0.1:11212' => '1.4.14')

* when one of the two server is dead

// null
// $status = null

我为此苦苦挣扎了几天,终于找到了解决办法

安装起来很容易:

  • composer需要fingo/laravel缓存回退

  • 将提供程序
    Fingo\LaravelCacheFallback\CacheFallbackServiceProvider::class
    添加到'config/app.php'中`

  • 默认回退顺序为:redis、memcached、数据库、cookie、文件、数组。如果需要更改回退顺序,请发布供应商:
    php artisan供应商:publish--provider=“Fingo\LaravelCacheFallback\CacheFallbackService provider”

  • 我正在将Laravel 5.2与PhP7一起使用,对库的要求是:
    php:~5.6 | ~7.0,illumb/cache:~5.1

    LE:我已经实现了一种不同的方法来从一个Memcached服务器故障切换到另一个Memcached服务器,如果它们都关闭了,那么它将故障切换到“文件”驱动程序

    config/cache.php:

    'memcached' => [
            'driver'  => 'memcached',
            // To use the options we need to install the PHP driver: sudo yum install php-memcached
            'options' => [
                Memcached::OPT_CONNECT_TIMEOUT => 3,
                Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
                Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
                Memcached::OPT_REMOVE_FAILED_SERVERS  => true,
                Memcached::OPT_RETRY_TIMEOUT => 1,
            ],
            'servers' => [
                [
                    'host' => 'xxx.xxx.xxx.xxx',
                    'port' => 11211,
                    'weight' => 90,
                ],
            ]
        ],
    
        'memcached249' => [
            'driver'  => 'memcached',
            // To use the options we need to install the PHP driver: sudo yum install php-memcached
            'options' => [
                Memcached::OPT_CONNECT_TIMEOUT => 3,
                Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
                Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
                Memcached::OPT_REMOVE_FAILED_SERVERS  => true,
                Memcached::OPT_RETRY_TIMEOUT => 1,
            ],
            'servers' => [
                [
                    'host' => 'xxx.xxx.xxx.xxx',
                    'port' => 11211,
                    'weight' => 100,
                ],
            ]
        ],
    
    config/cache_fallback.php

    唯一的问题是,如果第一个memcached服务器停机,它会降低整个系统的速度(但至少不会破坏主服务器)。希望这有帮助:)

    'memcached' => [
            'driver'  => 'memcached',
            // To use the options we need to install the PHP driver: sudo yum install php-memcached
            'options' => [
                Memcached::OPT_CONNECT_TIMEOUT => 3,
                Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
                Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
                Memcached::OPT_REMOVE_FAILED_SERVERS  => true,
                Memcached::OPT_RETRY_TIMEOUT => 1,
            ],
            'servers' => [
                [
                    'host' => 'xxx.xxx.xxx.xxx',
                    'port' => 11211,
                    'weight' => 90,
                ],
            ]
        ],
    
        'memcached249' => [
            'driver'  => 'memcached',
            // To use the options we need to install the PHP driver: sudo yum install php-memcached
            'options' => [
                Memcached::OPT_CONNECT_TIMEOUT => 3,
                Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
                Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
                Memcached::OPT_REMOVE_FAILED_SERVERS  => true,
                Memcached::OPT_RETRY_TIMEOUT => 1,
            ],
            'servers' => [
                [
                    'host' => 'xxx.xxx.xxx.xxx',
                    'port' => 11211,
                    'weight' => 100,
                ],
            ]
        ],
    
    return [
        'fallback_order' => [
            'memcached',
            'memcached249',
            'file',
        ]
    ];