del*_*8uk 2 php memcached caching autowired symfony
我们的 Symfony 3.4 应用程序上有 memcache:
cache:
app: cache.adapter.memcached
default_memcached_provider: "%app.memcached.dsn%"
Run Code Online (Sandbox Code Playgroud)
然而,我们被要求使用多个缓存服务器,因此仅传递一个 DSN 是不够的。
在这里(https://symfony.com/blog/new-in-symfony-3-3-memcached-cache-adapter),我看到你可以用这样的代码创建它:
$client = MemcachedAdapter::createConnection(array(
// format => memcached://[user:pass@][ip|host|socket[:port]][?weight=int]
// 'weight' ranges from 0 to 100 and it's used to prioritize servers
'memcached://my.server.com:11211'
'memcached://rmf:abcdef@localhost'
'memcached://127.0.0.1?weight=50'
'memcached://username:the-password@/var/run/memcached.sock'
'memcached:///var/run/memcached.sock?weight=20'
));
Run Code Online (Sandbox Code Playgroud)
但是,这不是自动连接的。
我相信我们需要创建一个提供程序类,或者以某种方式让它addServer($dsn)在实例化后进行调用。我还在随机帖子中看到以下内容:
memcache:
class: Memcached
calls:
- [ addServer, [ %app.memcached.dsn.1% ]]
- [ addServer, [ %app.memcached.dsn.2% ]]
Run Code Online (Sandbox Code Playgroud)
然而它并没有真正帮助或者我错过了一些东西。
有人可以帮忙吗?我如何创建这个提供者类?
您可以将上面的代码片段作为服务配置复制到 services.yaml 中,大致如下所示:
# app/config/services.yaml
services:
app.memcached_client:
class: Memcached
factory: 'Symfony\Component\Cache\Adapter\MemcachedAdapter::createConnection'
arguments: [['memcached://my.server.com:11211', 'memcached://rmf:abcdef@localhost']]
app.memcached_adapter:
class: Symfony\Component\Cache\Adapter\MemcachedAdapter
arguments:
- '@app.memcached_client'
Run Code Online (Sandbox Code Playgroud)
然后在您的配置中,您应该能够使用工厂创建的客户端来引用适配器,例如:
# app/config/config.yaml
framework:
cache:
app: app.memcached_adapter
Run Code Online (Sandbox Code Playgroud)
您也许还可以覆盖默认别名,cache.adapter.memcached而不用拥有自己的适配器。
您使用的方法Memcached::addServer可能也有效,但就像这样MemcachedAdapter::createConnection将返回客户端,该客户端需要传递给缓存适配器。这就是为什么有第二个服务app.memcached_adapter,它用于缓存配置。
请注意,我还没有测试过这个,所以这只是一个粗略的轮廓,而不是一个完整的工作解决方案,
| 归档时间: |
|
| 查看次数: |
1859 次 |
| 最近记录: |