我需要使用
framework.lock
设置 2 个以上 memcached 服务器的 Symfony Framework.yaml 参数 .env
。但是当我尝试这样做时,它无法识别 2 台服务器,而只能识别 1 台并且出现故障。
Symfony 锁文档:https://symfony.com/doc/current/lock.html
.env
文件,其中包含以下内容:MEMCACHE_SERVERS='memcached://m1.docker:11211,memcached://m2.docker:11211'
framework.yaml
文件,其中包含以下内容:framework:
lock: '%env(MEMCACHE_SERVERS)%'
controller method
查看创建的锁对象作为调试 /**
* @Route("/example")
*/
public function exampleAction(LockFactory $lockFactory): JsonResponse
{
dd($lockFactory->createLock('testing-lock', 2));
}
host
被识别为m1.docker:11211,memcached"
,第二个甚至没有被检测到。-store: Symfony\Component\Lock\Store\MemcachedStore {#22171 ▼
-memcached: Memcached {#23004 ▼
servers: array:1 [▼
0 => array:3 [▼
"host" => "m1.docker:11211,memcached"
"port" => 11211
"type" => "TCP"
]
]
options: {▶}
}
-initialTtl: 300
-useExtendedReturn: null
}
lock
参数framework.lock
,而不使用 .env。它有效。lock: ['memcached://m1.docker:11211','memcached://m2.docker:11211']
-store: Symfony\Component\Lock\Store\CombinedStore {#22386 ▼
-stores: array:2 [▼
0 => Symfony\Component\Lock\Store\MemcachedStore {#23199 ▼
-memcached: Memcached {#22471 ▼
servers: array:1 [▼
0 => array:3 [▼
"host" => "m1.docker"
"port" => 11211
"type" => "TCP"
]
]
options: {▶}
}
-initialTtl: 300
-useExtendedReturn: null
}
1 => Symfony\Component\Lock\Store\MemcachedStore {#22514 ▼
-memcached: Memcached {#22625 ▼
servers: array:1 [▼
0 => array:3 [▼
"host" => "m2.docker"
"port" => 11211
"type" => "TCP"
]
]
options: {▶}
}
-initialTtl: 300
-useExtendedReturn: null
}
]
问题。如何使用 .env 将 2 个以上的 memcached 服务器传递到 Framework.lock?
lock: '%env(MEMCACHE_SERVERS)%'
和 lock: ['memcached://m1.docker:11211','memcached://m2.docker:11211']
对我来说看起来很不同 - 我认为数组在这里有所不同。
请尝试设置环境变量,使其包含一个数组:
MEMCACHE_SERVERS='["memcached://m1.docker:11211","memcached://m2.docker:11211"]'
然后,配置锁,使其解析给定的数组:
framework:
lock: '%env(json:MEMCACHE_SERVERS)%'